用 SQL 连接 2 个表
Join 2 Tables together with SQL
我有一个 Customer
和 Customer_2
table,我想将它们连接在一起:
两个 table 中都有数据,但是在与语句连接时,只返回列名而没有数据。我正在尝试使用以下连接语句:
select distinct *
from Customer c
join Customer_2 d on c.CUST_NUM = d.CUST_NUM
这些是 table:
CREATE TABLE [Customer]
(
[CUST_NUM] [INT] NOT NULL,
[CUST_LNAME] [VARCHAR](50) NULL,
[CUST_FNAME] [VARCHAR](50) NULL,
CUST_BALANCE [MONEY] NOT NULL,
) ON [PRIMARY]
CREATE TABLE [Customer_2]
(
[CUST_NUM] [INT] NOT NULL,
[CUST_LNAME] [VARCHAR](50) NULL,
[CUST_FNAME] [VARCHAR](50) NULL,
) ON [PRIMARY]
每个Table中的数据:
INSERT INTO Customer
VALUES ('1000', 'Smith', 'Jeanne', '1050.11'),
('1001', 'Ortega', 'Juan', '840.92');
INSERT INTO CUSTOMER_2
VALUES ('2000', 'McPherson', 'Anne'),
('2001', 'Ortega', 'Juan'),
('2002', 'Kowalski', 'Jan'),
('2003', 'Chan', 'George');
预期输出将 customer_2 组合到客户 table 的底部,对于客户 2 [ 的四个客户中的每一个,额外的列 CUST_BALANCE
为 0 或 null table.
我想发生的事情是您的连接条件从未满足,这意味着两个表不具有相同的 cust_name
尝试按左下连接进行调试
select distinct *
from Customer c
Left join Customer_2 d on
c.CUST_NUM =
d.CUST_NUM
试试这个:
select c.[CUST_NUM] , c.[CUST_BALANCE]
FROM INVOICE I
JOIN (
SELECT CUST_NUM, CUST_BALANCE FROM Customer c
UNION
SELECT CUST_NUM, NULL as CUST_BALANCE FROM Customer_2 d
) tbl t on i.cust_num = t.cust_num
您是否想获得每个客户的总发票金额?完成此操作的最简单方法是创建 Customer 和 Customer_2 的派生 table。在此示例中,我使用 cte 来执行此操作。然后就变成了一个简单的聚合得到总数。
with Customers as
(
select CUST_NUM
, CUST_LNAME
, CUST_FNAME
from Customer
UNION ALL
select CUST_NUM
, CUST_LNAME
, CUST_FNAME
from Customer_2
)
select c.CUST_NUM
, c.CUST_FNAME
, c.CUST_LNAME
, InvoiceTotal = SUM(i.INV_AMOUNT)
from Customers c
left join INVOICE i on i.CUST_NUM = c.CUST_NUM
group by c.CUST_NUM
, c.CUST_FNAME
, c.CUST_LNAME
我有一个 Customer
和 Customer_2
table,我想将它们连接在一起:
两个 table 中都有数据,但是在与语句连接时,只返回列名而没有数据。我正在尝试使用以下连接语句:
select distinct *
from Customer c
join Customer_2 d on c.CUST_NUM = d.CUST_NUM
这些是 table:
CREATE TABLE [Customer]
(
[CUST_NUM] [INT] NOT NULL,
[CUST_LNAME] [VARCHAR](50) NULL,
[CUST_FNAME] [VARCHAR](50) NULL,
CUST_BALANCE [MONEY] NOT NULL,
) ON [PRIMARY]
CREATE TABLE [Customer_2]
(
[CUST_NUM] [INT] NOT NULL,
[CUST_LNAME] [VARCHAR](50) NULL,
[CUST_FNAME] [VARCHAR](50) NULL,
) ON [PRIMARY]
每个Table中的数据:
INSERT INTO Customer
VALUES ('1000', 'Smith', 'Jeanne', '1050.11'),
('1001', 'Ortega', 'Juan', '840.92');
INSERT INTO CUSTOMER_2
VALUES ('2000', 'McPherson', 'Anne'),
('2001', 'Ortega', 'Juan'),
('2002', 'Kowalski', 'Jan'),
('2003', 'Chan', 'George');
预期输出将 customer_2 组合到客户 table 的底部,对于客户 2 [ 的四个客户中的每一个,额外的列 CUST_BALANCE
为 0 或 null table.
我想发生的事情是您的连接条件从未满足,这意味着两个表不具有相同的 cust_name
尝试按左下连接进行调试
select distinct *
from Customer c
Left join Customer_2 d on
c.CUST_NUM =
d.CUST_NUM
试试这个:
select c.[CUST_NUM] , c.[CUST_BALANCE]
FROM INVOICE I
JOIN (
SELECT CUST_NUM, CUST_BALANCE FROM Customer c
UNION
SELECT CUST_NUM, NULL as CUST_BALANCE FROM Customer_2 d
) tbl t on i.cust_num = t.cust_num
您是否想获得每个客户的总发票金额?完成此操作的最简单方法是创建 Customer 和 Customer_2 的派生 table。在此示例中,我使用 cte 来执行此操作。然后就变成了一个简单的聚合得到总数。
with Customers as
(
select CUST_NUM
, CUST_LNAME
, CUST_FNAME
from Customer
UNION ALL
select CUST_NUM
, CUST_LNAME
, CUST_FNAME
from Customer_2
)
select c.CUST_NUM
, c.CUST_FNAME
, c.CUST_LNAME
, InvoiceTotal = SUM(i.INV_AMOUNT)
from Customers c
left join INVOICE i on i.CUST_NUM = c.CUST_NUM
group by c.CUST_NUM
, c.CUST_FNAME
, c.CUST_LNAME