Sql server 如何在SQL Server中根据列值选择不同的数据
目前我有Sql server 如何在SQL Server中根据列值选择不同的数据,sql-server,Sql Server,目前我有 Payroll带有列的表Payroll\u ID,Payroll\u Name Paycode带有列Paycode\u ID,Paycode\u Desc,paycodel\u ID “Paycode”表中的Payroll_ID列可以为空,当为空时,表示所有工资单,如果不是,则表示“Payroll”表中的特定工资单 我想做如下事情(这是伪代码,只是为了表达我的意图): 我如何在一句话中做到这一点(重要)?提前非常感谢!另外,请随意编辑该主题,因为我不确定我的措辞是否正确:)我认为第
带有列的表Payroll
,Payroll\u ID
Payroll\u Name
带有列Paycode
,Paycode\u ID
,Paycode\u Desc
paycodel\u ID
我如何在一句话中做到这一点(重要)?提前非常感谢!另外,请随意编辑该主题,因为我不确定我的措辞是否正确:)我认为第一个主题没有问题(随机双引号除外) 对于第二个问题,我建议使用连接语法——这是非常常见的,并且使事情更清楚 然后你可以用一个联盟来“组合它们”
SELECT
PC.Paycode_ID,
PC.PayCode_Desc + ' - All Payrolls' AS PayCode_Desc
FROM Paycode PC
WHERE PC.Payroll_ID = null;
UNION ALL
SELECT
PC.Paycode_ID,
PC.PayCode_Desc + PR.Payroll_Name AS PayCode_Desc
FROM Paycode P
JOIN Payroll PR ON PC.Payroll_ID = PR.Payroll_ID;
您可以将其简化为一条语句:
SELECT
PC.Paycode_ID,
PC.PayCode_Desc + ISNULL(PR.Payroll_Name, ' - all payrolls') AS PayCode_Desc
FROM
Paycode PC
LEFT OUTER JOIN
Payroll PR ON PC.Payroll_ID = PR.Payroll_ID
如果Payroll
表中没有相应的行,则PR.Payroll\u Name
将为NULL
,并将替换为-所有工资单
另外:使用适当的ANSI/ISO
JOIN
语法使您的生活更轻松 它是WHERE
,而不是WHEN
。。。。另外:您不能将NULL
与常用的相等或不相等运算符进行比较-您只能在第二次查询中使用IS NULL
或IS not NULL
:-在ANSI-92 SQL标准中,旧样式的逗号分隔表样式被正确的ANSIJOIN
语法所取代(20多年前)它的用法是discapsedhi@marc_,我想用一个语句来实现,而不是两个单独的语句:)正如我提到的,我只是用伪代码来表达我的意图,我不知道如何实现,这就是为什么会出现这个问题:)供将来参考:SQL使用=
表示相等,而不是=
,但我猜这只是上一个查询中的一个输入错误,正如你之前所说的。谢谢你,这就是我要找的:)你很有知识,我会记住语法
SELECT PC.Paycode_ID
, PC.PayCode_Desc + ISNULL(PR.Payroll_Name, ' - All payrolls') AS PayCode_Desc
FROM Paycode PC
LEFT JOIN Payroll PR ON PC.Payroll_ID = PR.Payroll_ID
SELECT
PC.Paycode_ID,
PC.PayCode_Desc + ISNULL(PR.Payroll_Name, ' - all payrolls') AS PayCode_Desc
FROM
Paycode PC
LEFT OUTER JOIN
Payroll PR ON PC.Payroll_ID = PR.Payroll_ID