TSQL, сводные строки в один столбец - PullRequest
0 голосов
/ 08 октября 2018

Раньше мне приходилось решать что-то похожее:

Вот мой стержень и сглаживание для другого решения: я хочу сделать то же самое на примере ниже, но это немного отличается, потому что нет рангов.

В моем предыдущем примере таблица выглядела следующим образом:

LocationID   Code    Rank
1            123     1
1            124     2
1            138     3
2            999     1
2            888     2
2            938     3

И я смог использовать эту функцию для правильного получения моих строк в одном столбце.

-- Check if tables exist, delete if they do so that you can start fresh.
IF OBJECT_ID('tempdb.dbo.#tbl_Location_Taxonomy_Pivot_Table', 'U') IS NOT NULL
  DROP TABLE #tbl_Location_Taxonomy_Pivot_Table; 
IF OBJECT_ID('tbl_Location_Taxonomy_NPPES_Flattened', 'U') IS NOT NULL 
  DROP TABLE tbl_Location_Taxonomy_NPPES_Flattened; 

-- Pivot the original table so that you have 
SELECT *
INTO #tbl_Location_Taxonomy_Pivot_Table
FROM [MOAD].[dbo].[tbl_Location_Taxonomy_NPPES] tax
PIVOT (MAX(tax.tbl_lkp_Taxonomy_Seq) 
       FOR tax.Taxonomy_Rank in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15])) AS pvt
       -- ORDER BY Location_ID

-- Flatten the tables.
SELECT Location_ID
,max(piv.[1]) as Tax_Seq_1
,max(piv.[2]) as Tax_Seq_2
,max(piv.[3]) as Tax_Seq_3
,max(piv.[4]) as Tax_Seq_4
,max(piv.[5]) as Tax_Seq_5
,max(piv.[6]) as Tax_Seq_6
,max(piv.[7]) as Tax_Seq_7
,max(piv.[8]) as Tax_Seq_8
,max(piv.[9]) as Tax_Seq_9
,max(piv.[10]) as Tax_Seq_10
,max(piv.[11]) as Tax_Seq_11
,max(piv.[12]) as Tax_Seq_12
,max(piv.[13]) as Tax_Seq_13
,max(piv.[14]) as Tax_Seq_14
,max(piv.[15]) as Tax_Seq_15
-- JOIN HERE
INTO tbl_Location_Taxonomy_NPPES_Flattened
FROM #tbl_Location_Taxonomy_Pivot_Table piv
GROUP BY Location_ID

Итак, вот данные, с которыми я хотел бы поработать в этом примере.

    LocationID  Foreign Key
    2           2
    2           670
    2           2902
    2           5389
    3           3
    3           722
    3           2905
    3           5561

Итак, у меня есть некоторые данные, отформатированные следующим образом: я использовал pivot для данных, как это раньше, --Но разница была в том, что у него тоже было звание.Есть ли способ заставить мои внешние ключи отображаться в этом формате с помощью сводки?

locationID   FK1  FK2  FK3  FK4
2            2    670 2902  5389
3            3    722 2905  5561

Другой способ, с помощью которого я пытаюсь решить эту проблему, заключается в следующем: Другой способ, которым я мог бы смотреть на это,У меня есть значения в: этой форме, а также:

LocationID        Address_Seq
2                       670, 5389, 2902, 2,
3                       722, 5561, 2905, 3
etc

Есть ли в любом случае я могу получить это, чтобы быть таким же?

ID         Col1    Col2    Col3    Col4
2           670     5389,   2902,     2  

1 Ответ

0 голосов
/ 08 октября 2018

Это, добавив столбец ранга и поменяв ордер, должно дать вам то, что вам нужно:

SELECT locationid, [4] col1, [3] col2, [2] col3, [1] col4
FROM  
(
SELECT locationid, foreignkey,rank from #Pivot_Table ----- temp table with a rank column 
) x
PIVOT (MAX(x.foreignkey) 
FOR  x.rank in ([4],[3],[2],[1]) )  pvt
...