首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将行的值转换为列

将行的值转换为列
EN

Stack Overflow用户
提问于 2017-10-30 17:15:06
回答 4查看 84关注 0票数 0

我在表中有一个列,它可以有3个值--高、中、低。

我想在一个网页上显示这些与3个复选框(高,中,低)为每个记录在表中,与相应的复选框勾选根据优先级。

代码语言:javascript
复制
ID  Priority
-----------
1   High
2   Low
3   High
4   Medium

我想编写一个返回以下输出的SQL查询

代码语言:javascript
复制
ID  High  Medium  Low
---------------------
1    Y
2                  Y
3    Y
4           Y

我想的方法是:

代码语言:javascript
复制
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个这样的列使用这种方法使我的查询非常长。

下面是一些列和它们可能具有的各种值的示例

  • 业务增长-增长,稳定,下降,NA
  • 检查的频率

请就更简单、更有效的解决方案提出建议。

EN

回答 4

Stack Overflow用户

发布于 2017-10-30 17:28:50

你可以这样做:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-10-30 18:30:43

代码语言:javascript
复制
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;

结果:

代码语言:javascript
复制
+----+------+--------+-----+
| ID | High | Medium | Low |
+----+------+--------+-----+
|  1 | Y    |        |     |
|  2 |      |        | Y   |
|  3 | Y    |        |     |
|  4 |      | Y      |     |
+----+------+--------+-----+

或将IIF()用作:

代码语言:javascript
复制
SELECT ID, 
       IIF(Priority = 'High', 'Y', '') AS High,
       IIF(Priority = 'Medium', 'Y', '') AS Medium,
       IIF(Priority = 'Low', 'Y', '') AS Low
FROM @T;
票数 2
EN

Stack Overflow用户

发布于 2017-10-30 17:32:47

你给我看的密码有效。你有什么问题?

代码语言:javascript
复制
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

下面是一个可以使用这里的rextester示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47020834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档