到目前为止,我正在对多个表进行资料提取,我有这个
表 A
ID | 价值 |
---|---|
1 | 123 |
表 B
ID | 档案ID | 栏位ID | 援助 | 资料 |
---|---|---|---|---|
1 | 1 | 1 | 1 | 美国广播公司 |
2 | 1 | 2 | 1 | 123 |
3 | 1 | 3 | 1 | 真的 |
4 | 1 | 1 | 2 | 定义 |
5 | 1 | 2 | 2 | 456 |
6 | 1 | 3 | 2 | 错误的 |
到目前为止我有
SELECT Id, Plate, [1] as field1, [2] as field2, [3] as field3 FROM
(SELECT A.Id, A.value , B.Data as datavalue, B.Id as dataid
FROM TableA A, TableB B
WHERE A.Id = B.A_ID)as P
PIVOT (MAX(dataid) FOR datavalue in ([1],[2],[3])) as PVT
我期待的答案
ID | 价值 | 栏位1 | 栏位2 | 栏位3 |
---|---|---|---|---|
1 | 123 | 美国广播公司 | 123 | 真的 |
我得到的答案
ID | 价值 | 栏位1 | 栏位2 | 栏位3 |
---|---|---|---|---|
1 | 123 | 空值 | 空值 | 空值 |
我错过了什么
想不通
uj5u.com热心网友回复:
您需要 LEFT JOIN 从:表 B 到表 A 而不是表 A 到表 B
在嵌套选择中切换两个表。
uj5u.com热心网友回复:
使用Group by
和Max
功能并将枢轴代码更改为:
PIVOT (MAX(datavalue) FOR datavalue in ([abc],[123],[TRUE])) AS PVT
SELECT Id,
value,
max([abc]) as field1,
max([123]) as field2,
max([TRUE]) as field3
FROM
(SELECT A.Id, A.value , B.Data AS datavalue, B.Id AS dataid
FROM TableA A, TableB B
WHERE A.Id = B.A_ID) AS P
PIVOT (MAX(datavalue) FOR datavalue in ([abc],[123],[TRUE])) AS PVT
GROUP BY id,value
db<>fiddle 中的演示
uj5u.com热心网友回复:
我相信您的意思是 B.FieldId 而不是 B.Id。除此之外,您需要稍作修改(您的 dataId 和 dataValue 错误,它会是
... Max(datavalue) for dataId in ...
代替
... Max(dataId) for dataValue in ...
这是修订版:
SELECT
ID, PVT.value, [1] AS field1, [2] AS field2, [3] AS field3
FROM
(
SELECT
A.ID, A.value, B.Data AS datavalue, B.FieldId AS dataid
FROM TableA A
INNER JOIN TableB B ON A.ID=B.A_ID
) AS P
PIVOT(MAX(datavalue)
FOR dataid IN([1], [2], [3])
) AS PVT;
这是DBFiddle 演示。
0 评论