Sql 从多个表中提取数据

Sql 从多个表中提取数据,sql,Sql,我有两张桌子 表A INV AMT DISC 1001 1500 150 1002 3000 300 表B INV DESC AMT 1001 CHARGES 100 1001 FREIGHT 30 1001 INSURANCE 20 1002 CHARGES 215 1002 FREIGHT 32 1002 INSURANCE 25 对于表B,我在这里使用SQL将行格式转换为列格式: SELECT t

我有两张桌子

表A

INV    AMT   DISC
1001  1500    150
1002  3000    300
表B

INV  DESC        AMT
1001 CHARGES     100
1001 FREIGHT      30
1001 INSURANCE    20
1002 CHARGES     215
1002 FREIGHT      32
1002 INSURANCE    25
对于表B,我在这里使用SQL将行格式转换为列格式:

SELECT t.inv,
         MAX(CASE WHEN t.description = 'CHARGES' THEN t.amount ELSE NULL END) AS charges,
         MAX(CASE WHEN t.description = 'FREIGHT' THEN t.amount ELSE NULL END) AS freight,
         MAX(CASE WHEN t.description = 'INSURANCE' THEN t.amount ELSE NULL END) AS insurance
    FROM TABLE B
GROUP BY t.inv
ORDER BY t.inv
如何使用SQL将数据组合成这种格式:

INV     AMT   DISC    CHARGES FREIGHT INSURANCE
1001   1500    150      100      30       20
1002   3000    300      215      32       25

谢谢。

您需要在表A和表B之间进行联接

declare @TableA as table (inv int, amount int, disc int)
declare @TableB as table (inv int, description varchar(50), amount int)

insert into @TableA values (1001, 1500, 105)
insert into @TableA values (1002, 3000, 300)

insert into @TableB values (1001, 'CHARGES', 100)
insert into @TableB values (1001, 'FREIGHT', 30)
insert into @TableB values (1001, 'INSURANCE', 20)
insert into @TableB values (1002, 'CHARGES', 215)
insert into @TableB values (1002, 'FREIGHT', 32)
insert into @TableB values (1002, 'INSURANCE', 25)

select
    A.inv,
    A.amount,
    A.disc,
    B.charges,
    B.freight,
    B.insurance
from @TableA as A
    inner join (
                SELECT t.inv,
                       MAX(CASE WHEN t.description = 'CHARGES' THEN t.amount ELSE NULL END) AS charges,
                       MAX(CASE WHEN t.description = 'FREIGHT' THEN t.amount ELSE NULL END) AS freight,
                       MAX(CASE WHEN t.description = 'INSURANCE' THEN t.amount ELSE NULL END) AS insurance
                FROM @TableB as t
                GROUP BY t.inv) as B
        on A.inv = B.inv
where
    B.charges = 100 and
    A.inv = 1001
输出为


您需要在表A和表B之间进行联接

declare @TableA as table (inv int, amount int, disc int)
declare @TableB as table (inv int, description varchar(50), amount int)

insert into @TableA values (1001, 1500, 105)
insert into @TableA values (1002, 3000, 300)

insert into @TableB values (1001, 'CHARGES', 100)
insert into @TableB values (1001, 'FREIGHT', 30)
insert into @TableB values (1001, 'INSURANCE', 20)
insert into @TableB values (1002, 'CHARGES', 215)
insert into @TableB values (1002, 'FREIGHT', 32)
insert into @TableB values (1002, 'INSURANCE', 25)

select
    A.inv,
    A.amount,
    A.disc,
    B.charges,
    B.freight,
    B.insurance
from @TableA as A
    inner join (
                SELECT t.inv,
                       MAX(CASE WHEN t.description = 'CHARGES' THEN t.amount ELSE NULL END) AS charges,
                       MAX(CASE WHEN t.description = 'FREIGHT' THEN t.amount ELSE NULL END) AS freight,
                       MAX(CASE WHEN t.description = 'INSURANCE' THEN t.amount ELSE NULL END) AS insurance
                FROM @TableB as t
                GROUP BY t.inv) as B
        on A.inv = B.inv
where
    B.charges = 100 and
    A.inv = 1001
输出为


您的问题和疑问是什么?我需要用以下格式回答:-INV AMT DISC CHANGES货运保险1001 1500 150 100 30 20 1002 3000 300 215 32 25在您的问题中陈述您的问题,而不是在评论中!并且一定要解释你到目前为止尝试了什么,以及你是如何失败的!你的问题是什么?我需要用以下格式回答:-INV AMT DISC费用运费保险1001 1500 150 30 20 1002 3000 300 215 32 25在你的问题中陈述你的问题,而不是在评论中!并且一定要解释你到目前为止尝试了什么,以及你是如何失败的!错误:SQL0122-选择列表中的列或表达式无效。(州:S1000,本地代码:FFFFFF86)??没问题。发现了问题。非常感谢。现在我已经把它们组合在一起了,我怎么能加上说费用='100'?我试着使用“where charges='100'”和“where b.charges='100'”。这两种方法都不产生任何输出。@鲍勃:在select语句中添加了where子句并显示了输出。我遵循了上面的方法&它产生了一个空白输出。任何原因?错误:SQL0122-选择列表中的列或表达式无效。(州:S1000,本地代码:FFFFFF86)??没问题。发现了问题。非常感谢。现在我已经把它们组合在一起了,我怎么能加上说费用='100'?我试着使用“where charges='100'”和“where b.charges='100'”。这两种方法都不产生任何输出。@鲍勃:在select语句中添加了where子句并显示了输出。我遵循了上面的方法&它产生了一个空白输出。有什么原因吗?