用于组合2个表数据而没有左连接的SQL语句

时间:2016-06-27 12:02:47

标签: sql-server tsql

我有2个用外键约束映射的SQL表

Table A

Field1 
Field2
....

第二个

Table B

Year
Value
TableAId (foreign key)

如何获得这样的输出而不是连接2个表并在每一行中重复表A字段

Result

Field1
Field2
...
TableBValue1 (first value field from table B)
TableBValue2
...

一些示例数据

表A

ID - Field 1 - Field 2 - ...

1 - "Banana" - "Cold"  - ...
2 - "Apple" - "Hot" - ...

表B

ID - Year - Value - TableAId

1 - 2016 - 1.5 - 1
2 - 2017 - 3.2 - 1
3 - 2018 - 1.6 - 1
4 - 2016 - 1.8 - 2
5 - 2017 - 2.2 - 2
6 - 2018 - 2.6 - 2

预期结果

ID - Field 1 - Field 2 - ... - 2016Value - 2017Value - 2018Value

1 - "Banana" - "Cold" -  ... - 1.5 - 3.2 - 1.6
2 - "Apple" - "Hot" - ... - 1.8 - 2.2 - 2.6

1 个答案:

答案 0 :(得分:0)

希望这有帮助,

CREATE TABLE #TableA (ID INT, F1 VARCHAR(50), F2 VARCHAR(50))
CREATE TABLE #TableB (ID INT, TableAId INT, YEAR INT, Value float)
INSERT INTO #TableA
SELECT 1,
       'Banana',
       'Cold'
UNION
SELECT 2,
       'Apple',
       'Hot'
INSERT INTO #TableB (ID, YEAR, Value, TableAId)
SELECT 1, 2016, 1.5, 1
UNION
SELECT 2, 2017, 3.2, 1
UNION
SELECT 3, 2018, 1.6, 1
UNION
SELECT 4, 2016, 1.8, 2
UNION
SELECT 5, 2017, 2.2, 2
UNION
SELECT 6, 2018, 2.6, 2
SELECT *
FROM #TableA
SELECT *
FROM #TableB GO WITH CTEResult AS
  ( SELECT TableAID,
           A.F1,
           A.F2,
           B.YEAR,
             B.Value
   FROM #TableA A
   INNER JOIN #TableB B ON A.ID = B.TableAId)
SELECT *
FROM CTEResult PIVOT (Max(Value)
                      FOR YEAR IN ([2016],[2017],[2018])) Res