填写剩余的SQL类别
我有一位客人:填写剩余的SQL类别,sql,sql-server,Sql,Sql Server,我有一位客人: UserId Name Amount 1 AA 1 1 BB 1 1 CC 1 1 DD 1 2 AA 1 2 BB 1 2 CC 1 3 AA 1 3 CC 1 我需要选择我将看到的每个用户ID的每个名称(AA、BB、CC、DD)-如果他
UserId Name Amount
1 AA 1
1 BB 1
1 CC 1
1 DD 1
2 AA 1
2 BB 1
2 CC 1
3 AA 1
3 CC 1
我需要选择我将看到的每个用户ID的每个名称(AA、BB、CC、DD)-如果他在上一个表中没有该名称的记录,我也要用0填充金额。因此,对于给定的示例,结果应为:
UserId Name Amount
1 AA 1
1 BB 1
1 CC 1
1 DD 1
2 AA 1
2 BB 1
2 CC 1
2 DD 0
3 AA 1
3 BB 0
3 CC 1
3 DD 0
我认为我不能用
“case when…”
来实现这一点,所以也许可以在表上使用一些只包含所有名称的连接。。?感谢您的帮助请分两步思考。首先获取所有行,然后填充值。第一部分使用交叉联接
。第二个操作可以通过左连接(或相关子查询)完成:
分两步考虑这个问题。首先获取所有行,然后填充值。第一部分使用交叉联接
。第二个操作可以通过左连接(或相关子查询)完成:
你能试试这个吗
SELECT B.UserId, A.Name, ISNULL(C.Amount,0) Amount
FROM
(SELECT DISTINCT Name FROM TEMP) A
CROSS JOIN
(SELECT DISTINCT USERID FROM TEMP) B
LEFT JOIN TEMP C ON B.USERID = C.USERID AND A.NAME = C.NAME
ORDER BY B.USERID, A.NAME
你能试试这个吗
SELECT B.UserId, A.Name, ISNULL(C.Amount,0) Amount
FROM
(SELECT DISTINCT Name FROM TEMP) A
CROSS JOIN
(SELECT DISTINCT USERID FROM TEMP) B
LEFT JOIN TEMP C ON B.USERID = C.USERID AND A.NAME = C.NAME
ORDER BY B.USERID, A.NAME
“在只有所有名称的表上加入”,是的!“在只有所有名称的表上加入”,是的!