如何根据SQL Server中的列值选择不同的数据

时间:2015-08-28 19:23:10

标签: sql-server

目前我有

  • Payroll表格中包含Payroll_ID列,Payroll_Name

  • Paycode表包含Paycode_ID列,PayCode_DescPayroll_ID

Payroll_ID列在" Paycode"中可以为空表,如果它为空,则表示所有工资单,如果不是,则表示工资单中的特定工资单"工资单"表

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

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 PC, Payroll PR 
WHERE
    PC.Payroll_ID != null AND PC.Payroll_ID == PR.Payroll_ID;

我如何在一个声明(重要)中实现这一目标?非常感谢你提前!另外,请随意编辑主题,因为我不确定我是否正确:)

3 个答案:

答案 0 :(得分:2)

您可以将其简化为一个声明:

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_Name将为NULL,并将替换为- all payrolls

另外:使用正确的 ANSI / ISO JOIN语法,让您的生活更轻松!

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我没有看到第一个问题(随机双引号除外)

对于第二个我会建议加入语法 - 这很常见并使事情更清楚。

然后你可以"将它们结合起来"与联盟全部

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;