【问题标题】:transpose columns to rows将列转置为行
【发布时间】:2010-09-27 16:53:10
【问题描述】:

以下查询按预期工作。

但是如何在行中获得显示在列中的结果?

select curdate() AS one, 
date_sub(curdate(), interval 15 day) AS two
, date_sub(curdate(), interval 30 day) AS three
, date_sub(curdate(), interval 45 day) AS four
, date_sub(curdate(), interval 60 day) AS five
, date_sub(curdate(), interval 75 day) AS six
, date_sub(curdate(), interval 90 day) AS seven
;

| one        | two        | three      | four       | five       | six        | seven      |
+------------+------------+------------+------------+------------+------------+------------+
| 2010-09-27 | 2010-09-12 | 2010-08-28 | 2010-08-13 | 2010-07-29 | 2010-07-14 | 2010-06-29 | 

连续预期结果:

one 2010-09-27
two 2010-09-12
three 2010-08-28
four 2010-08-13
five 2010-07-29
six 2010-07-14
seven 2010-06-29

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    您可以为此使用UNION ALL

    select 'one' as label,  curdate() as val
    UNION ALL
    select 'two' as label,  date_sub(curdate(), interval 15 day) as val
    UNION ALL
    select 'three' as label,  date_sub(curdate(), interval 30 day)  as val
    UNION ALL
    select 'four' as label,  date_sub(curdate(), interval 45 day) as val
    UNION ALL
    select 'five' as label,  date_sub(curdate(), interval 60 day) as val
    UNION ALL
    select 'six' as label,  date_sub(curdate(), interval 75 day)  as val
    UNION ALL
    select 'seven' as label,  date_sub(curdate(), interval 90 day) as val
    

    【讨论】:

    • 我认为这仅在您的列是相同数据类型时才有效。我收到此错误:“将 varchar 值 'fieldx' 转换为数据类型 int 时转换失败。”
    • @Misi 您需要将数字列转换为字符串。
    • 你有这样的SP吗?因为我需要只知道表名来动态提取数据。如果我有多行,我该如何转置?
    • @Misi - 听起来你应该问一个关于这个的新问题。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2023-03-27
    • 2019-08-04
    • 2021-03-30
    相关资源
    最近更新 更多