想知道是否有人可能知道一个小的SQL脚本的技巧.
http://sqlfiddle.com/#!3/09638/3
我期待只返回有手动变速器的行并且是福特制造的.如果不存在任何行,则返回所有福特制造的车辆.我目前正在使用IF EXIST条件.我考虑使用临时表来存储第一组数据,然后查看表的rowcount()(插入行== 0)以查看是否需要插入更多数据.可能没有其他方法可以做到这一点,然后我描述了我的两个选项.也许社区对此有一些想法.
CREATE TABLE Cars
(
Make varchar(50),
Model varchar(50),
ManualTransmission bit
);
INSERT INTO Cars
(Make, Model, ManualTransmission)
VALUES
('Ford', 'Taurus', 0),
('Ford', 'Contour', 0),
('Ford', 'Mustang', 0),
('Jeep', 'Liberty', 1),
('Jeep', 'Cherokee', 0);
Run Code Online (Sandbox Code Playgroud)
单程
WITH CTE
AS (SELECT *,
RANK() OVER (ORDER BY ManualTransmission DESC) AS Rnk
FROM Cars
WHERE Make = 'Ford')
SELECT Make,
Model,
ManualTransmission
FROM CTE
WHERE Rnk = 1
Run Code Online (Sandbox Code Playgroud)
或其他
SELECT TOP 1 WITH TIES Make,
Model,
ManualTransmission
FROM Cars
WHERE Make = 'Ford'
ORDER BY ManualTransmission DESC
Run Code Online (Sandbox Code Playgroud)
这两个答案都利用ManualTransmission了BIT数据类型的事实,并且1是它可以拥有的最大可能值.如果可以ManualTransmission为空,那么您需要将它们更改为
ORDER BY ISNULL(ManualTransmission,0) DESC
Run Code Online (Sandbox Code Playgroud)
要么
ORDER BY CASE WHEN ManualTransmission = 1 THEN 0 ELSE 1 END
Run Code Online (Sandbox Code Playgroud)
该CASE版本还适用于更复杂的条件.
| 归档时间: |
|
| 查看次数: |
605 次 |
| 最近记录: |