我在表格中有一列可以有3个值 - 高,中,低。
我想在网页上显示这些内容,其中包含表格中每条记录的3个复选框(高,中,低),并根据优先级勾选相应的复选框。
ID Priority
-----------
1 High
2 Low
3 High
4 Medium
我想编写一个返回以下输出的SQL查询
ID High Medium Low
---------------------
1 Y
2 Y
3 Y
4 Y
我想到的方法是:
select
ID,
case
when priority = "High" then "Y"
else "N"
end as High,
case
when priority = "Medium" then "Y"
else "N"
end as Medium,
case
when priority = "Low" then "Y"
else "N"
end as Low;
这是我实际想要实现的玩具问题。
在我的真实项目中,我有5-6个这样的选项,每个列都不同,使用这种方法有4个这样的列使我的查询很长。
以下是一些列及其可能包含的各种值的示例
请提供更简单,更有效的解决方案。
答案 0 :(得分:2)
您可以这样做:
SELECT id,
CASE WHEN priority = 'High' THEN 'Y' ELSE '' END AS High,
CASE WHEN priority = 'Medium' THEN 'Y' ELSE '' END AS Medium,
CASE WHEN priority = 'Low' THEN 'Y' ELSE '' END AS Low
FROM table
答案 1 :(得分:2)
DECLARE @T TABLE ( ID INT, Priority NVARCHAR(50) );
INSERT INTO @T ( ID,Priority) VALUES
(1, N'High'),
(2, N'Low'),
(3, N'High'),
(4, N'Medium');
SELECT ID, ISNULL(High, F) As High, ISNULL(Medium, F) As Medium, ISNULL(Low, F) As Low
FROM
(
SELECT ID, Priority, 'Y' T , '' F
FROM @T
) P1
PIVOT
(
MAX(T) for Priority IN ([High], [Medium], [Low])
)
P2 ORDER BY ID;
结果:
+----+------+--------+-----+
| ID | High | Medium | Low |
+----+------+--------+-----+
| 1 | Y | | |
| 2 | | | Y |
| 3 | Y | | |
| 4 | | Y | |
+----+------+--------+-----+
或使用IIF()
作为:
SELECT ID,
IIF(Priority = 'High', 'Y', '') AS High,
IIF(Priority = 'Medium', 'Y', '') AS Medium,
IIF(Priority = 'Low', 'Y', '') AS Low
FROM @T;
答案 2 :(得分:1)
你给我看的代码有效。你有什么问题?
select id
,case when priority = 'high' then 'y' else 'n' end as high
,case when priority = 'medium' then 'y' else 'n' end as medium
,case when priority = 'low' then 'y' else 'n' end as low
from mytable
以下是您可以使用here进行的rextester示例。
答案 3 :(得分:0)
您可以使用CASE
声明或computed columns。