sql - 如何使用空值进行 SQL 自连接

标签 sql tsql

我正在使用 MS SQL 2008。我的表如下所示:

| Name  | Code | Amt  |
| ----- | ---- | ---- |
| April |  A   | 1.23 |
| Barry |  A   | 2.34 |
| Barry |  B   | 3.45 |
| Cliff |  A   | 4.56 |
| Cliff |  B   | 5.67 |
| Cliff |  C   | 6.78 |

我需要这样的输出:

| Name  | Code_A | Code_B | Code_C |
| ----- | ------ | ------ | ------ |
| April |  1.23  |  NULL  |  NULL  |  
| Barry |  2.34  |  3.45  |  NULL  |
| Cliff |  4.56  |  5.67  |  6.78  |

NULL 可以为零。

通过自连接,我可以获得 Cliff,但无法获得 Barry 和 April,因为我使用的是类似这样的东西,它只有在所有三个条件都可用时才会输出。

SELECT     a.Name, a.Amt Code_A, b.Amt Code_B, c.Amt Code_C
FROM       Table_1 as c INNER JOIN
                  Table_1 AS b ON c.Name = b.Name INNER JOIN
                  Table_1 AS a ON b.Name = a.Name 
WHERE     (a.Code = 'A') AND (b.Code = 'B') AND (c.Code = 'C')

最佳答案

我认为不是JOIN,而是PIVOT在这里更合适:

SELECT 
    Name, 
    [A] AS Code_A, 
    [B] AS Code_B, 
    [C] AS Code_C
FROM (
    SELECT Name, Code, Amount
    FROM Table_1
) t
PIVOT (
    SUM(Amount)
    FOR Code IN ([A], [B], [C])
) AS pvt

关于sql - 如何使用空值进行 SQL 自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10319788/

相关文章:

mysql - 在 Mysql- PhpMyAdmin 中从它自己的触发器修改表

mysql left join 所有行的最大值

mysql - SQL 查询显示列中的字符串值

sql - 默认的 T-SQL JOIN 行为是什么,INNER 还是 OUTER?

sql - 如何将 MDF 文件附加到具有相同 LDF 名称的服务器?

sql - 如何编写 SQL 函数以减少代码重复

c# - 如何使用逗号更改小数位的值,例如表中的 2,532.00 更改为 2532。

sql - 选择总计以仅返回 SQL Server 中的一条记录

database - SQL Server 删除多个数据库的方法

php - 准备好的 SQL LIKE 语句不返回所有结果