【问题标题】:SQL - format outputSQL - 格式输出
【发布时间】:2015-06-17 07:09:35
【问题描述】:

有人可以指导我格式化以下 SQL 查询以按以下格式打印吗?

------------------------
COUNT_NAME | COUNT_VAL |
------------------------
COUNT_A    | 1         | 
COUNT_B    | 2         |  
COUNT_C    | 3         |  
COUNT_D    | 4         |
------------------------

以下查询以以下格式返回输出

--------------------------------
COUNT_A|COUNT_B|COUNT_C|COUNT_D|
--------------------------------
1      |2      |3      |4
--------------------------------

SQL查询

SELECT t1.COUNT_A, 
       t2.COUNT_B,
       t3.COUNT_C,
       t4.COUNT_D 
FROM
   (SELECT COUNT(INS_NAME) as COUNT_A 
    from table_A 
    where INS_NAME IN 
           (SELECT INS_NAME 
            from table_B 
            WHERE INS_ID IN 
                 (SELECT INS_MAP_ID 
                  FROM TEN_TO_INST_MAP 
                  where T_IN_MAP_ID = 
                     (SELECT T_ID 
                      FROM TW 
                      WHERE TNAM = 'abc')
                  )
            ) 
   AND T_DATE between '2015-01-01' and '2015-07-01' 
   AND INS_NAME NOT LIKE 'x%pr%' 
   AND INS_NAME like 'x%y%' 
   AND INS_NAME not like 'x%y%z') t1
,
(SELECT COUNT(INS_NAME) as COUNT_B 
 from table_A 
 where INS_NAME IN 
             (SELECT INS_NAME 
              from table_B 
              WHERE INS_ID IN 
                 (SELECT INS_MAP_ID 
                  FROM T_IN_MAP 
                  where T_IN_MAP_ID = (SELECT T_ID 
                                       FROM TW WHERE TNAM = 'abc')
                 )
             ) 
    AND T_DATE between '2015-01-01' and '2015-07-01' 
    AND INS_NAME NOT LIKE 'x%pr%' 
    AND INS_NAME like 'x%as%') t2
,
(SELECT COUNT(INS_NAME) as COUNT_C 
 from table_A 
 where INS_NAME IN 
      (SELECT INS_NAME 
       from table_B 
       WHERE INS_ID IN 
            (SELECT INS_MAP_ID 
             FROM T_IN_MAP 
             where T_IN_MAP_ID = (SELECT T_ID 
                                  FROM TW 
                                  WHERE TNAM = 'abc')
            )
       ) 
 AND T_DATE between '2015-01-01' and '2015-07-01' 
 AND INS_NAME NOT LIKE 'x%pr%' 
 AND INS_NAME like 'x%dfg%') t3
,
(SELECT COUNT(INS_NAME) as COUNT_C 
 from table_A 
 where INS_NAME IN 
           (SELECT INS_NAME 
            from table_B 
            WHERE INS_ID IN 
                (SELECT INS_MAP_ID 
                 FROM T_IN_MAP 
                 where T_IN_MAP_ID = (SELECT T_ID 
                                      FROM TW 
                                      WHERE TNAM = 'abc')
                )
            ) 
    AND T_DATE between '2015-01-01' and '2015-07-01' 
    AND INS_NAME NOT LIKE 'x%pr%' 
    AND INS_NAME like 'x%y%z') t4

【问题讨论】:

  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?
  • AM 使用 MYSQL。您能否修改查询以完全按照我要求的输出包含标题?我真的很感激任何帮助
  • 希望此链接对您有所帮助。 stackoverflow.com/questions/16359345/…
  • Hello Praveen/All - 我确实尝试按照 Praveen 链接中的示例进行操作。不幸的是,我无法让它工作:(。我首先用 UNION 替换了 SELECT 语句之间的“,”,然后是 UNION ALL。这没有帮助。然后我将 t1,t2,t3,t4 合并为 t1 没有也无济于事。在示例之后尝试了其他一些技巧,但没有帮助。任何人都可以为我的查​​询格式化以打印该输出。我对编写相当复杂的 SQL 查询以及因此的请求很陌生。

标签: mysql sql


【解决方案1】:

我相信您需要一个 Pivot 才能将行数据转换为列。 这个主题几乎正是您所需要的: MySQL pivot table

【讨论】:

  • 非常感谢您将我引导到正确的轨道。环顾四周寻找枢轴的东西,我偶然发现了这篇文章 - MySql 将行转置为列,将列转置为行。我已经修改了我的 SQL 内联,还结合了 Christopher Gibson 评论中的指导方针。它仍然无法正常工作。这看起来相当复杂,我现在将看看在 UI 代码中处理此问题的其他替代方法。特别感谢 Praveen 和 Christopher。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多