我只用SQL完成了一些代码课程(即,这是超级新手),但是我在应用程序中使用它,并且很难弄清楚它是如何翻译的。
我正在尝试在[1] .DEPCD等于[2] .DEPCD的情况下进行联接,但是我希望它将'DEPCD的100和200视为可互换。
此代码部分有效:
[1].EMPLID=[2].EMPLID AND
[1].DEPCD in ('100', '200') AND [2].DEPCD in ('100', '200')
这对它的另一部分有效:
[1].EMPLID=[2].EMPLID AND
[1].DEPCD = [2].DEPCD
在键入此内容时,请考虑一下,也许可以(?):
[1].EMPLID=[2].EMPLID AND
(([1].DEPCD in ('100', '200') AND [2].DEPCD in ('100', '200')) OR
([1].DEPCD not in ('100', '200') AND [2].DEPCD not in ('100', '200')) AND
[1].DEPCD = [2].DEPCD)
它接受语法,但这似乎草率。什么是干净的方法?
表格示例
[1]
EMPLD | DEPCD | NAME
101 | 100 | Todd
101 | 200 | Todd
101 | 300 | Todd
[2]
EMPLD | DEPCD | AMOUNT
101 | 100 | 25
101 | 200 | 35
101 | 300 | 50
报告示例:
EMPLD | DESCRIPTION | NAME | AMOUNT
101 | 100 + 200 | Todd | 60
101 | 300 | Todd | 50
“描述”列来自我在其中结合了100和200的字段。
答案 0 :(得分:3)
虽然我不确定100%给出示例数据和预期结果的情况,但整个查询的外观如何,这是将aggregation
与case
结合使用的一种选择:
select t1.empld,
t1.name,
case when t1.depcd in (100,200) then '100 + 200'
else cast(t1.depcd as varchar(100))
end as description,
sum(t2.amount) as amount
from t1
join t2 on t1.empld = t2.empld and t1.depcd = t2.depcd
group by t1.empld,
t1.name,
case when t1.depcd in (100,200) then '100 + 200'
else cast(t1.depcd as varchar(100))
end