【发布时间】:2016-12-07 01:26:54
【问题描述】:
我有一张这样的数据表
Road Item Response added_on
1 82 Yes 7/11/16
1 83 Yes 7/11/16
1 84 Yes 7/11/16
2 82 Yes 8/11/16
2 83 No 8/11/16
2 85 Yes 8/11/16
这反映了对“项目”是正在评估的事物的道路的评估。 有些项目将始终在评估期间完成 (82, 83),而其他项目是可选的 (84, 85)。 我想返回一个结合了道路/日期的所有评估结果的东西,如果该项目没有被评估,则返回 null。而且也只返回上个月的结果。例如
Road 82 83 84 85 added_on
1 Yes Yes Yes 7/11/16
2 Yes No Yes 8/11/16
我已经尝试过像这样的多个自我连接,但它什么也没返回。
FROM assess AS A
JOIN assess AS B
ON A.road = B.road AND a.added_on = B.added on
JOIN assess AS C
ON A.road = C.road AND a.added_on = C.added on
JOIN assess AS D
ON A.road = D.road AND a.added_on = D.added on
WHERE A.item = '81'
AND B.item = '82'
AND (C.item = '83' OR C.item IS NULL)
AND (D.item = '84' OR D.item IS NULL)
AND datepart(month,A.added_on) = datepart(month,getdate()) -1
为了澄清,
-没有道路每天评估一次以上
- 每个项目仅评估一次,有时为 NULL,即不适用
- 每天评估多条道路
- 此表还有其他评估,但我们并不担心这些。
有什么想法吗?使用 SQL Server 2008。谢谢。
【问题讨论】:
-
有多少项目,这个数字是固定的和已知的吗?
-
听起来您正在寻找 PIVOT 之类的东西 - 请参阅 msdn.microsoft.com/en-us/library/ms177410.aspx。
标签: sql sql-server tsql