2016-08-15 4 views
2

こんにちは、私は使用しようとしました ピボットと左に同じテーブルを結合し、ここで同様のqを見たが、私は欲しい結果を得ることはできませんエキスパートのための専門家:):行の結果を列に変換する

DECLARE @temp TABLE (id INT, typeID INT) 

INSERT INTO @temp VALUES(1,1) 
INSERT INTO @temp VALUES(1,2) 
INSERT INTO @temp VALUES(1,3) 
INSERT INTO @temp VALUES(1,4) 
INSERT INTO @temp VALUES(1,5) 
INSERT INTO @temp VALUES(2,1) 
INSERT INTO @temp VALUES(2,2) 
INSERT INTO @temp VALUES(2,3) 
INSERT INTO @temp VALUES(3,5) 


SELECT * FROM @temp 

--desired result 
---------------------------------------------------------- 
[id] [typeID1] [typeID2] [typeID3] [typeID4] [typeID5] 
1  1   1  1   1   1 
2  1   1  1 
3             1 
---------------------------------------------------------- 
+1

異なる製品は、ピボット機能がそれぞれ異なります。使用しているdbmsにタグを付けてください! – jarlh

+0

申し訳ありません、そのSQL Server私は – frar

+1

を使用しています。あなたは 'PIVOT'演算子を見ていますか? – Squirrel

答えて

1

このコードはほとんどのSQL DBMSで実行されます。

select id, 
    max(case typeID when 1 then 1 end) as typeID1, 
    max(case typeID when 2 then 1 end) as typeID2, 
    max(case typeID when 3 then 1 end) as typeID3, 
    max(case typeID when 4 then 1 end) as typeID4, 
    max(case typeID when 5 then 1 end) as typeID5 
from @temp 
group by id 
0

PIVOTと動的SQLを使用した別の方法(私たちはテーブルにどのように多くのtypeIDのプレゼントを知らないよう:

USE tempdb 

CREATE TABLE #temp (id INT, typeID INT) 

INSERT INTO #temp VALUES 
(1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(2,2),(2,3),(3,5) 

DECLARE @columns nvarchar(max), 
     @sql nvarchar(max) 

SELECT @columns = COALESCE(@columns,'') + ',[typeID'+CAST(typeID as nvarchar(max))+']' 
FROM #temp 
GROUP BY typeID 

SET @sql = N' 
SELECT id'[email protected]+' 
FROM (
SELECT ''typeID''+CAST(typeID as nvarchar(max)) as [types], 
     id 
FROM #temp) as t 
PIVOT (
    COUNT([types]) FOR [types] IN ('+STUFF(@columns,1,1,'')+') 
) as unpvt' 

EXEC sp_executesql @sql 

DROP TABLE #temp 

出力:

id typeID1 typeID2 typeID3 typeID4 typeID5 
1 1  1  1  1  1 
2 1  1  1  0  0 
3 0  0  0  0  1 
+1

COUNT(タイプ)で十分です。余分な列は必要ありません。 – Serg

+0

@Sergありがとうございました!同意する!答えのこの部分を変更しました。 – gofr1

0

この従ってください:https://msdn.microsoft.com/en-us/library/hh231515.aspx

私の意見では、それがどのように動作するかを学ぶなら、本当に役に立ちます:

DECLARE @temp TABLE (id INT, typeID INT) 

INSERT INTO @temp VALUES(1,1) 
INSERT INTO @temp VALUES(1,2) 
INSERT INTO @temp VALUES(1,3) 
INSERT INTO @temp VALUES(1,4) 
INSERT INTO @temp VALUES(1,5) 
INSERT INTO @temp VALUES(2,1) 
INSERT INTO @temp VALUES(2,2) 
INSERT INTO @temp VALUES(2,3) 
INSERT INTO @temp VALUES(3,5) 

SELECT ID, 
[1] as Type1, [2] as Type2, [3] as Type3, [4] as Type4, [5] as Type5 
FROM 
(SELECT ID, typeID 
    FROM @temp) AS SourceTable 
PIVOT 
(
COUNT(TYPEID) 
FOR TYPEID IN ([1], [2], [3], [4],[5]) 
) AS PivotTable 
関連する問題