2017-07-26 3 views
0
  • Iは、テーブルT1(IDT1、名前)
  • を有するIは、テーブルT2(IDT2、OptionDescription)
  • は最終的に、私はテーブルを持っているhave T3(選択されたIDT3、T1Id、T2Id)
  • T1を持っていると仮定

:T2SQLは - 列として水平のデータ、一つのテーブルのデータを取得するために、多くのselect

idT1 Name 
1  John 
2  Mary 
3  Bill 

とで

idT2 OptionDescription 
1  "Available On Monday" 
2  "Available On Tuesdey" 
3  "Available all Nights" 

とT3

idT3 T1Id T2Id Selected 
1  1  1  True 
2  1  2  True 
3  1  3  False 
4  2  1  False 
5  2  2  False 
6  2  3  True 

それは(私は列の結果として、T2の説明を意味)、「水平」の方法でT1およびT2/T3のデータを取得するクエリを記述することが可能です以下のような:

idT1 Name "Available On Monday" "Available On Tuesdey" "Available all Nights" 
1  John True     True     False 
2  Mary False     False     True 
+0

スタックオーバーフローで何回も答えられているピボットクエリを探しています。まだ何か試しましたか? –

+0

いいえ、私は前にピボットクエリを使用していませんでした(これは何であるかわかりません、私は今それを勉強します)、私は試して、質問に合ったものを見つけるために他の答えを検索します。 – Falco

答えて

0

使用ピボット

Select * from 
(
select t1.idT1,t1.Name,t2.OptionDescription,selected from t1 
inner join t3 on t1.idT1=t3.idT2 
inner join t2 on t2.idT2=t3.idT3 
)x 
pivot 
(
max(selected) 
FOR x.OptionDescription in ([Available On Monday],[Available On Tuesdey],[Available all Nights]) 
) pvt 
0
DECLARE @T1 TABLE (idT1 INT, Name VARCHAR(50)) 
INSERT INTO @T1 VALUES 
(1, 'John'), 
(2, 'Mary'), 
(3, 'Bill'); 
DECLARE @T2 TABLE (idT2 INT, OptionDescription VARCHAR(50)) 
INSERT INTO @T2 VALUES 
(1, 'Available On Monday'), 
(2, 'Available On Tuesdey'), 
(3, 'Available all Nights'); 
DECLARE @T3 TABLE (idT3 INT, T1Id INT, T2Id INT, Selected VARCHAR(50)) 
INSERT INTO @T3 VALUES 
(1, 1, 1, 'True'), 
(2, 1, 2, 'True'), 
(3, 1, 3, 'False'), 
(4, 2, 1, 'False'), 
(5, 2, 2, 'False'), 
(6, 2, 3, 'True'); 

-- THE QUERY USING CTE -- NOTE YOU MUST NOT USE CTE 
; WITH CTE AS 
(
SELECT 
T1.idT1, 
T1.Name, 
T2.OptionDescription, 
T3.Selected 
FROM @T3 AS T3 
INNER JOIN @T1 AS T1 ON T3.T1Id=T1.idT1 
INNER JOIN @T2 AS T2 ON T3.T2Id=T2.idT2 

) 
SELECT * FROM CTE 
PIVOT 
(
MAX(selected) FOR OptionDescription IN ([Available On Monday],[Available On Tuesdey],[Available all Nights]) 
) AS PV1 
0

セレクト* (からx.selected ( 選択x.IdT1、x.Name、t2.OptionDescription、から にT3に参加t1からt1.IdT1、t1.Name、t3.T2Id、t3.Selectedを選択t1.idT1 = t3.T1Id) は[[Tuesdeyで利用可能]、[月曜日に利用可能(でOptionDescriptionためx.T2Id = t2.IdT2 )SRC ピボット( MAX(選択) にT2に参加xはすべて利用可能な夜]) )piv;

関連する問題