Nax*_*xos 2 sql sql-server sql-server-2008-r2
我有一个问题,我认为其中一个问题会在底部解决但我仍然有问题.问题是我的案例陈述是错误的(但运行没有错误)但不确定我还缺少什么.
我的目标是,如果DueDate为NULL,因为Table2中没有记录,因此我想要的是将此值显示为"No"而不是"NULL".我在我的代码中添加了"IsNull",但还没有解决我的问题.我在这些论坛上看过ISNULL()和COALEASE()但无法得到我想要的结果
以下是我的工作代码:
SELECT
Client,
COUNT(*) AS ReadyRecords,
(SELECT COUNT(*) FROM Table1 EPR WHERE actioned=8 AND EPR.Client=Table1.Client) AS Outstanding,
(SELECT TOP 1
CASE
WHEN DueDate < GETDATE() THEN 'Yes'
WHEN DueDate IS NULL THEN 'No'
ELSE 'No'
END AS DueDate
FROM Table2 GL WHERE GL.Client=Table1.Client ORDER BY DueDate) AS DueDate
FROM Table1 WHERE Actioned=2 GROUP BY Client
Run Code Online (Sandbox Code Playgroud)
编辑:
当前结果集:
Client | ReadyRecords | Outstanding | DueDate
Test | 42 | 54 | NULL
Stack | 150 | 10 | NULL
JBloggs | 32 | 28 | Yes
DBloggs | 2 | 17 | Yes
Overflow | 1 | 1 | No
Run Code Online (Sandbox Code Playgroud)
期望的结果集:
Client | ReadyRecords | Outstanding | DueDate
Test | 42 | 54 | No
Stack | 150 | 10 | No
JBloggs | 32 | 28 | Yes
DBloggs | 2 | 17 | Yes
Overflow | 1 | 1 | No
Run Code Online (Sandbox Code Playgroud)
表格1:
id | Client | Actioned | etc...
5245 | Test | 8 | etc...
....so on
Run Code Online (Sandbox Code Playgroud)
表2:
id | Client | DueDate
1 | JBloggs | 2012-12-01 00:00:00.000
2 | DBloggs | 2012-12-05 00:00:00.000
3 | Overflow | 2012-12-12 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
需要帮助请叫我.
相似/相关问题:
您需要将ISNULL()or或COALESCE()函数应用于整个内联子查询,如下所示:
SELECT
Client,
COUNT(*) AS ReadyRecords,
(SELECT COUNT(*) FROM Table1 EPR
WHERE actioned=8 AND EPR.Client=Table1.Client
) AS Outstanding,
COALESCE(
(SELECT TOP 1
CASE
WHEN DueDate < GETDATE() THEN 'Yes'
END AS DueDate
FROM Table2 GL WHERE GL.Client=Table1.Client ORDER BY DueDate
), 'No'
) AS DueDate
FROM Table1 WHERE Actioned=2 GROUP BY Client ;
Run Code Online (Sandbox Code Playgroud)
或者在CASE那里移动表达式:
SELECT
Client,
COUNT(*) AS ReadyRecords,
(SELECT COUNT(*) FROM Table1 EPR
WHERE actioned=8 AND EPR.Client=Table1.Client
) AS Outstanding,
CASE WHEN
(SELECT TOP 1
DueDate
FROM Table2 GL WHERE GL.Client=Table1.Client ORDER BY DueDate
) < GETDATE()
THEN 'Yes'
ELSE 'No'
END AS DueDate
FROM Table1 WHERE Actioned=2 GROUP BY Client ;
Run Code Online (Sandbox Code Playgroud)