作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请原谅我的问题太简单了,我脑子里放屁了:
这是我的表架构:
Foo( FooId, BarDate dateTime, Baz int )
鉴于此查询
SELECT
MAX( Foo.BarData )
FROM
Foo
WHERE
Foo.Baz = 2
AND
Foo.BarData < @dateParameter
在某些情况下,此查询会返回 NULL
,因为没有满足条件的行,在这些情况下,我希望查询返回相同的值,除非 Foo.Baz = 0
.
我可以用两个子查询来做到这一点,但这似乎是一种黑客行为。难道就没有更好的办法了吗?
SELECT
COALESCE( Attempt1.BarData, Attempt2.BarData )
FROM
(
SELECT
MAX( Foo.BarData ) As BarData
FROM
Foo
WHERE
Foo.Baz = 2
AND
Foo.BarData < @dateParameter
) As Attempt1
OUTER JOIN
(
SELECT
MAX( Foo.BarData ) As BarData
FROM
Foo
WHERE
Foo.Baz = 0
AND
Foo.BarData < @dateParameter
) As Attempt2 ON 1 = 1
最佳答案
只需选择两行并将结果限制为 1 行,按顺序将首选行排在前面
SELECT TOP 1
MAX( Foo.BarData )
FROM
Foo
WHERE
((Foo.Baz = 2) OR
(Foo.Baz = 0))
AND
Foo.BarData < @dateParameter
GROUP BY Foo.Baz
ORDER BY Foo.Baz DESC
关于sql - 执行相同的查询两次,但使用单个不同的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966467/
我是一名优秀的程序员,十分优秀!