2015-09-01 4 views
0

У меня есть две таблицы:SQL присоединился к сводной таблице без агрегатного

Table1 
ID TYPE 
1 ABC1 
2 ABC2 
3 ABC3 

Table2 
ID Data 
1 100 
1 101 
2 10 
2 90 

И я хочу, чтобы результаты выглядеть следующим образом:

ID Data1 Data2 
1 100 101 
2 10  90 

Но у меня полная кобыла с моими попытками создавая опорный стержень. До сих пор у меня есть:

With Inital_Data As ( 
Select 
A.ID, 
B.Data As Data1, 
B.Data As Data2 

From 
Table1 A join 
Table2 B on 
A.ID = B.ID 
) 

Select * 
From 
Initial_Data 
PIVOT 
(Max(ID) FOR Data IN (Data1,Data2)) p 

Я знаю, что это мусор, но до сих пор даже логика того, что я пытаюсь добиться убегает меня, не говоря уже о синтаксисе! Может ли кто-нибудь дать мне руководящую руку?

+0

Может быть здесь ответа для вас: http://stackoverflow.com/questions/1343145/tsql-pivot - без агрегатной функции – StoicFnord

+0

вы можете предоставить мне результат, который вы получаете? – mohan111

+0

Я не получаю никакого выхода Джонатана, это ошибки! :) –

ответ

0

Pivot с более чем одной колонкой нуждается в некоторых трюках, я предпочитаю конкатенацию XML. Сначала я беру все значения для каждого идентификатора только в одном XML, затем вы можете принимать эти значения один за другим:

Просто вставьте это в пустое окно запроса и выполните. Адаптировать для ваших нужд

EDIT: Включает в себя тип столбца из TABLE1 как Caption для ID ...

DECLARE @Table1 TABLE(ID INT,[TYPE] VARCHAR(10)); 
INSERT INTO @Table1 VALUES 
(1,'ABC1') 
,(2,'ABC2') 
,(3,'ABC3'); 

DECLARE @Table2 TABLE(ID INT,DATA INT); 
INSERT INTO @Table2 VALUES 
(1,100) 
,(1,101) 
,(2,10) 
,(2,90); 

WITH DistinctIDs AS 
(
    SELECT DISTINCT tbl2.ID,tbl1.[TYPE] 
    FROM @Table2 AS tbl2 
    INNER JOIN @Table1 AS tbl1 ON tbl1.ID=tbl2.ID 
) 
SELECT ID,[TYPE] 
     ,concatXML.x.value('/root[1]/item[1]/@data','int') AS Data1 
     ,concatXML.x.value('/root[1]/item[2]/@data','int') AS Data2 
FROM DistinctIDs AS dIDs 
CROSS APPLY 
(
    SELECT ID AS [@id],DATA AS [@data] 
    FROM @Table2 AS tbl WHERE tbl.ID=dIDs.ID 
    FOR XML PATH('item'), ROOT('root'),TYPE 
) AS concatXML(x) 
+0

@MattHollands, если это решение для вас, пожалуйста, проголосуйте и/или отметьте как принято, если полезно ... Если нет, просто спросите! – Shnugo

+0

Извините Shnugo, результаты должны были иметь столбец Type из таблицы 1 в первом столбце. Спасибо за Ваш ответ. Я попробую это сегодня. –

+0

@MattHollands, отредактировал мой код, чтобы получить столбец [TYPE] в результате. Пожалуйста, проголосуйте, если помогите, THX – Shnugo

Смежные вопросы