Sql 从表A中选择所有行,并在同一组结果中从表B中选择多个列
我在SQL Server 2012中有两个表,我需要使用where从其中一个表中获取多个列,但我可以得到我想要的结果=S: 这是我的两张桌子: 表A:Sql 从表A中选择所有行,并在同一组结果中从表B中选择多个列,sql,sql-server,pivot,Sql,Sql Server,Pivot,我在SQL Server 2012中有两个表,我需要使用where从其中一个表中获取多个列,但我可以得到我想要的结果=S: 这是我的两张桌子: 表A: id name -------------- 1 AAA 2 BBB 3 CCC 4 DDD 5 EEE 6 FFF 7 GGG idB id(A) price ------------------
id name
--------------
1 AAA
2 BBB
3 CCC
4 DDD
5 EEE
6 FFF
7 GGG
idB id(A) price
----------------------
0 1 50
0 2 60
0 3 70
0 4 80
0 5 90
1 1 110
1 2 120
1 6 160
3 2 220
3 3 230
3 4 240
3 5 250
3 6 260
表B:
id name
--------------
1 AAA
2 BBB
3 CCC
4 DDD
5 EEE
6 FFF
7 GGG
idB id(A) price
----------------------
0 1 50
0 2 60
0 3 70
0 4 80
0 5 90
1 1 110
1 2 120
1 6 160
3 2 220
3 3 230
3 4 240
3 5 250
3 6 260
我需要一个查询来显示这些表的结果:
A.id A.name B.Price(idB=0) B.Price(idB=1) B.Price(idB=3)
-------------------------------------------------------------------
1 AAA 50 110 NULL
2 BBB 60 120 220
3 CCC 70 NULL 230
4 DDD 80 NULL 240
5 EEE 90 NULL 250
6 FFF NULL 160 260
你知道我怎样才能得到这个结果吗
谢谢你的帮助
Saludos进行
内部连接
并使用条件加重
select a.id, a.name,
max(case when b.idB = 0 then b.price end) as [B.Price(idB=0)],
max(case when b.idB = 1 then b.price end) as [B.Price(idB=1)],
max(case when b.idB = 3 then b.price end) as [B.Price(idB=3)]
from tableA a
inner join tableB b on b.[id(A)] = a.id
group by a.id, a.name;
我希望这对你有用
DECLARE @a TABLE(A1 INT, A2 NVARCHAR(10))
INSERT @a VALUES
(1 ,'AAA')
,(2 ,'BBB')
,(3 ,'CCC')
,(4 ,'DDD')
,(5 ,'EEE')
,(6 ,'FFF')
,(7 ,'GGG')
DECLARE @b TABLE (B1 INT, B2 INT, B3 INT)
INSERT @b VALUES
(0, 1, 50 )
,(0, 2, 60 )
,(0, 3, 70 )
,(0, 4, 80 )
,(0, 5, 90 )
,(1, 1, 110)
,(1, 2, 120)
,(1, 6, 160)
,(3, 2, 220)
,(3, 3, 230)
,(3, 4, 240)
,(3, 5, 250)
,(3, 6, 260)
SELECT a.A1 [A.id], a.A2 [A.name], b.B3 [B.Price(idB=0)], b1.B3 [B.Price(idB=1)], b2.B3[B.Price(idB=3)] FROM @a a
LEFT JOIN @b b ON a.A1 = b.B2 AND b.B1 = 0
LEFT JOIN @b b1 ON a.A1 = b1.B2 AND b1.B1 = 1
LEFT JOIN @b b2 ON a.A1 =b2. B2 AND b2.B1 = 3
-------------------------------------------------------------
--Result
-------------------------------------------------------------
A.id A.name B.Price(idB=0) B.Price(idB=1) B.Price(idB=3)
1 AAA 50 110 NULL
2 BBB 60 120 220
3 CCC 70 NULL 230
4 DDD 80 NULL 240
5 EEE 90 NULL 250
6 FFF NULL 160 260
7 GGG NULL NULL NULL
请这样使用-(相应更改列名)
SELECT a.*,b1.price,b2.price,b3.price FROM TableA a
LEFT JOIN TableB b1 ON a.id = b1.idA AND b1.idB = 0
LEFT JOIN TableB b2 ON a.id = b2.idA AND b2.idB = 1
LEFT JOIN TableB b3 ON a.id = b3.idA AND b3.idB = 3
WHERE b1.price IS NOT NULL or b2.price IS NOT NULL or b3.price IS NOT NULL
id name price price price
----------- ---------- ----------- ----------- -----------
1 AAA 50 110 NULL
2 BBB 60 120 220
3 CCC 70 NULL 230
4 DDD 80 NULL 240
5 EEE 90 NULL 250
6 FFF NULL 160 260
(6 rows affected)
输出
SELECT a.*,b1.price,b2.price,b3.price FROM TableA a
LEFT JOIN TableB b1 ON a.id = b1.idA AND b1.idB = 0
LEFT JOIN TableB b2 ON a.id = b2.idA AND b2.idB = 1
LEFT JOIN TableB b3 ON a.id = b3.idA AND b3.idB = 3
WHERE b1.price IS NOT NULL or b2.price IS NOT NULL or b3.price IS NOT NULL
id name price price price
----------- ---------- ----------- ----------- -----------
1 AAA 50 110 NULL
2 BBB 60 120 220
3 CCC 70 NULL 230
4 DDD 80 NULL 240
5 EEE 90 NULL 250
6 FFF NULL 160 260
(6 rows affected)
您可以使用左连接和条件聚合。在SO中有很多类似的情况。您可以在sql serverHi@GiorgosBetsos中使用pivot,我尝试了左连接和多表B别名,但我无法得到我想要的结果=S。很乐意帮忙。