首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中子查询的转置/旋转结果中1行的显示结果

中子查询的转置/旋转结果中1行的显示结果
EN

Stack Overflow用户
提问于 2015-02-27 00:38:14
回答 1查看 128关注 0票数 0

我有一张桌子MonitorLocationDetails,如下所示

代码语言:javascript
复制
lid LoclColumn  LocDescription
1   MP1         MP-1 descr
2   MP2         MP-2 descr
3   MainGate    Main Gate descr 

我应该获得LocDescription的行,并像在其他版本的server中那样转换它。在sql紧凑型版本中不可用。旋转应该基于子查询的结果。

代码语言:javascript
复制
SELECT LocColumn,LocDescription 
FROM MonitorLocationDetails 
WHERE LocColumn IN ('MP1','MP2','MainGate')

这个很好用。

我到目前为止:

代码语言:javascript
复制
SELECT DISTINCT 
    (CASE WHEN P.LocColumn = 'MP1' THEN P.LocDescription ELSE '' END), 
    (CASE WHEN P.LocColumn = 'MainGate' THEN P.LocDescription ELSE '' END), 
    (CASE WHEN P.LocColumn = 'MP2' THEN P.LocDescription ELSE '' END) 
FROM (
    SELECT LocColumn,LocDescription 
    FROM MonitorLocationDetails 
    WHERE LocColumn IN ('MP1','MP2','MainGate')
) P

产生的结果:

代码语言:javascript
复制
column1     column2     column3
                        MP-2 descr
            Main Gate desc  
MP-1 descr      

空旷的空间,即使有独特的用途。我没有给列命名,因为我需要如下1行的结果

代码语言:javascript
复制
MP-1 descr   Main Gate descr    MP-2 descr

有谁能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-27 00:42:38

你离我很近。你只要把MAX放在CASE expression前面就行了。

代码语言:javascript
复制
SELECT 
    MAX(CASE WHEN P.LocColumn = 'MP1' THEN P.LocDescription ELSE '' END), 
    MAX(CASE WHEN P.LocColumn = 'MainGate' THEN P.LocDescription ELSE '' END), 
    MAX(CASE WHEN P.LocColumn = 'MP2' THEN P.LocDescription ELSE '' END) 
FROM (
    SELECT LocColumn,LocDescription 
    FROM MonitorLocationDetails 
    WHERE LocColumn IN ('MP1','MP2','MainGate')
) P

您还可以简化查询:

代码语言:javascript
复制
;WITH MonitorLocationDetails(lid, LocColumn, LocDescription) AS(
    SELECT 1, 'MP1', 'MP-1 Descr' UNION ALL
    SELECT 2, 'MP2', 'MP-2 Descr' UNION ALL
    SELECT 3, 'MainGate', 'MainGate Descr'
)
SELECT
    MAX(CASE WHEN LocColumn = 'MP1' THEN LocDescription ELSE '' END), 
    MAX(CASE WHEN LocColumn = 'MainGate' THEN LocDescription ELSE '' END), 
    MAX(CASE WHEN LocColumn = 'MP2' THEN LocDescription ELSE '' END) 
FROM MonitorLocationDetails 
WHERE LocColumn IN ('MP1','MP2','MainGate')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28755547

复制
相关文章

相似问题

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