目前我有
Payroll
表格中包含Payroll_ID
列,Payroll_Name
Paycode
表包含Paycode_ID
列,PayCode_Desc
,Payroll_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;
我如何在一个声明(重要)中实现这一目标?非常感谢你提前!另外,请随意编辑主题,因为我不确定我是否正确:)
答案 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;