Выберите запрос по типу мудрый - PullRequest
1 голос
/ 25 декабря 2011

Table1

Code, desc, type id

01    Rajan    1
01    Sajan    1
01    Vijayan  2
01    Suresh   3
01    Caresh   4
01    Sujesh   4
01    vikran   4
02    desk     1
02    card     2
02    villa    2
02    megash   2
02    supan    3
....

Я хочу просмотреть таблицу по идентификатору типа

Ожидаемый вывод

Code type-1 type-2 type-3 type-4

01   Rajan  Vijayan suresh caresh
01   Sajan  null    null   Sujan
01   null   null    null   vikran
02   desk   card    supan  null
02   null   villa   null   null
02   null   megash  null   null

Как сделать запрос для вышеуказанного условия

Нужна помощь по запросу

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

Итак, сначала просто подготовьте ваши данные.Обратите внимание, что я добавляю идентификатор строки идентификатора на потом.

IF OBJECT_ID('tempdb..#test') IS NOT NULL
   drop table #test
IF OBJECT_ID('tempdb..#Numbered') IS NOT NULL
   drop table #Numbered

 CREATE TABLE #test (Code CHAR(2), [DESC] varchar(10), [type id] INT, RowNumber INT IDENTITY(1,1))


INSERT #test 
    VALUES ('01', 'Rajan', 1),
           ('01' ,'Sajan', 1),
           ('01' ,'Vijayan', 2),
           ('01' ,'Suresh', 3),
           ('01' ,'Caresh', 4),
           ('01' ,'Sujesh', 4),
           ('01' ,'vikran', 4),
           ('02' ,'desk', 1),
           ('02' ,'card' ,2),
           ('02' ,'villa', 2),
           ('02', 'megash', 2),
           ('02', 'supan', 3)

Затем мы создаем область хранения, которая использует этот идентификатор строки, чтобы вычислить, какой строке кода должно следовать каждое из имен.

  CREATE TABLE #Numbered
      (
       RowNum int, Code CHAR(2), [type] VARCHAR(10), [DESC] VARCHAR(10)
       )

   INSERT #Numbered
         SELECT (select count(*) from #test where code=t1.Code AND [type id]=t1.[type id] AND  RowNumber<=t1.RowNumber),
                 code, 
                [type id], 
                [DESC]
            FROM #test t1

Наконец, мы создаем таблицу PIVOT для данных (выполняется стандартным способом SQL 2000 для "подделки" этого оператора).Затем мы помещаем эту «таблицу PIVOT» в производную выборку, которая возвращает только те столбцы, которые нам нужны, но позволяет нам сортировать по столбцам кода и столбца rownum для генерации запрошенного вами результата.

     SELECT Code,[type-1],[type-2],[type-3],[type-4]
        FROM (Select P.Code,RowNum
                   , Min( Case When type = '1' Then [DESC] End ) As [type-1]
                   , Min( Case When type = '2' Then [DESC] End ) As [type-2]
                   , Min( Case When type = '3' Then [DESC] End ) As [type-3]
                   , Min( Case When type = '4' Then [DESC] End ) As [type-4]
                      From #Numbered As P
                        Group By P.Code,RowNum) R
        ORDER BY Code,RowNum

Пожалуйста, дайте мне знать, если вам нужны дальнейшие объяснения по этому поводу.

0 голосов
/ 25 декабря 2011
Select t1.code, t1.description, t2.description, t3.description from
(Select code, description from table where type=1) t1, 
(Select code, description from table where type=2) t2, 
(Select code, description from table where type=3) t3,
(Select code, description from table where type=4) t4
Where t1.code=t2.code and t2.code=t3.code and t3.code=t4.code and t4.code=t1.code
and t4.code=t2.code and t1.code=t3.code

Попробуйте этот запрос, он не будет возвращать ноль, но будет возвращать повторяющиеся значения

свяжитесь, если у вас есть какие-либо сомнения

...