0
以下是表格和請求列表;如何進行查詢以列出交叉匹配圖表
表A
ID Description Code
1 Desc1 CodeA
2 Desc2 CodeB
3 Desc3 CodeC
4 Desc4 CodeD
5 Desc5 CodeE
表B(代碼之間關係的匹配,包括它們-自我)
ID TableA_ID TableA_ID_Relation
1 1 1
2 1 2
3 2 1
4 2 2
5 2 3
6 2 4
7 3 2
8 3 3
9 4 1
10 4 3
11 4 4
12 5 1
13 5 2
14 5 3
15 5 4
16 5 5
請求列表輸出的表A和B上述(關係應顯示在BIT類型中)
ID Description CodeA CodeB CodeC CodeD CodeE
1 Desc1 CodeA 1 1 0 0 0
2 Desc2 CodeB 1 1 1 1 0
3 Desc3 CodeC 0 1 1 0 0
4 Desc4 CodeD 1 0 1 1 0
5 Desc5 CodeE 1 1 1 1 1
我已經開始使用Pivot查詢。但是,我還沒有得到好的結果。 這是整個結構以及查詢和輸出。
表結構:
CREATE TABLE TableA (
[ID] INT IDENTITY(1,1) NOT FOR REPLICATION NOT NULL
, [Description] NVARCHAR(50) NULL
, [Code] NVARCHAR(10) NULL)
CREATE TABLE TableB (
[ID] INT IDENTITY(1,1) NOT FOR REPLICATION NOT NULL
, [TableA_ID] INT NULL
, [TableA_ID_Relation] INT NULL)
INSERT INTO TableA([Description], [Code])
VALUES('Desc1','CodeA')
,('Desc2','CodeB')
,('Desc3','CodeC')
,('Desc4','CodeD')
,('Desc5','CodeE')
INSERT INTO TableB([TableA_ID], [TableA_ID_Relation])
VALUES(1,1)
,(1,2)
,(2,1)
,(2,2)
,(2,3)
,(2,4)
,(3,2)
,(3,3)
,(4,1)
,(4,3)
,(4,4)
,(1,1)
,(2,2)
,(3,3)
,(4,4)
,(5,5)
查詢:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(Code)
FROM TableA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
PRINT @cols
set @query = 'SELECT ID,Description, ' + @cols + ' from
(
SELECT A.ID, A.Description, A.Code, B.TableA_ID_Relation
FROM TableA A
LEFT OUTER JOIN TableB B ON B.TableA_ID_Relation = A.ID
) x
pivot
(
MAX(Code)
for Code in (' + @cols + ')
) p '
PRINT @query
execute(@query);
而結果雖然不是我想要的東西;
到目前爲止,我已經嘗試做一個查詢,它並不順利。 在我進行某種複雜的開發之前,我想聽聽您的可能意見。
非常感謝嘟嘟,非常接近!是否有機會在說明欄旁邊添加「代碼」列以便給出這是一個交叉匹配圖的印象? CodeA <> CodeA,CodeB <> CodeB ... – Sener
@Sener,fixed .... –
讚賞您的幫助。我還修正了一個小故障,將返回的BIT值從1和0之間反轉。 – Sener