多对多显示列为

时间:2018-01-11 07:58:33

标签: sql-server tsql stored-procedures

我在尝试计算如何调整查询时遇到了一些困难。我不太擅长SQL查询,因为这不是我的强项。无论如何,我不确定我做错了什么。这是我的表格设置。

ID | Customer
---+-------------
1  | John
2  | Jane
3  | Steve


ID | Assets
---+-------------
1  | RealEstate
2  | Currency
3  | Stocks


CustomerID | AssetConfigurationId | Status
-----------+----------------------+-------
     1     |           1          |  E
     1     |           2          |  F
     1     |           3          |  X
     2     |           3          |  X

如果我查询customer = 3,我想得到以下

AssetConfigurationId | Status
---------------------+------------
         1           | null
         2           | null
         3           | X

目前有这个。我试图了解如何使用左连接来显示所有资产,并且只为特定客户将状态值设置为null。现在它只显示第3行。尝试在SQL Server存储过程中执行此操作,以便我的.net应用程序可以获取资产列表,并且我只是在将它们转换为对象时修改状态。

select
    ac.Id,
    r.Status
from 
    assets ac
left join 
    assets_ref r on r.AssetConfigurationId = ac.Id
where 
    r.CustomerID = 3

2 个答案:

答案 0 :(得分:0)

在内部查询中移动WHERE条件。

select
    ac.Id,
    r.Status
from assets ac
left join 
(select * from assets_ref where CustomerID = 3) r 
on r.AssetConfigurationId = ac.Id;

答案 1 :(得分:0)

您可以在JOIN s中使用多个条件:

select
    ac.Id,
    r.Status
from assets ac
left join assets_ref r
    on r.AssetConfigurationId = ac.Id
    and CustomerID = 3;