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

“Paycode”表中的Payroll_ID列可以为空,当为空时,表示所有工资单,如果不是,则表示“Payroll”表中的特定工资单

我想做如下事情(这是伪代码,只是为了表达我的意图):


我如何在一句话中做到这一点(重要)?提前非常感谢!另外,请随意编辑该主题,因为我不确定我的措辞是否正确:)

我认为第一个主题没有问题(随机双引号除外)

对于第二个问题,我建议使用连接语法——这是非常常见的,并且使事情更清楚

然后你可以用一个联盟来“组合它们”

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标准中,旧样式的逗号分隔表样式被正确的ANSI
JOIN
语法所取代(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