【问题标题】:Need implementation like this in SQL [closed]在 SQL 中需要这样的实现 [关闭]
【发布时间】:2020-09-12 04:14:28
【问题描述】:

我有一张这样的桌子:

我想要这个 - 我正在尝试使用 PIVOT,但没有得到预期的结果:

【问题讨论】:

  • 请展示您的尝试
  • 我正在尝试使用 PIVOT,但没有达到预期。? -> 请edit 提出您的问题,并向我们展示您的尝试。
  • 请阅读this,了解一些改进问题的技巧。

标签: sql sql-server tsql pivot window-functions


【解决方案1】:

您可以进行条件聚合。我怀疑你想要:

select 
    sbno,
    max(case when test_name = 'Test1' then val end) test1,
    max(case when test_name = 'Test2' then val end) test2,
    max(case when test_name = 'Test3' then val end) test3
from (
    select t.*, row_number() over(partition by sbno, test_name order by val) rn
    from mytable t
) t
group by sbno, rn
order by sbno, rn

Demo on DB Fiddle

sbno |测试1 |测试2 |测试3 ---: | :---- | :---- | :---- 1 |一个 |乙| C 1 | D | | 2 |一个 |乙| C 2 | D | |

【讨论】:

  • 不能像 Pivot 一样工作......
  • @SANDEEP:查看我的更新答案(和演示)。
【解决方案2】:

这是一个使用row_number()PIVOT 的选项

示例

Select *
 From  (
        Select *
              ,RowNr = (row_number() over (partition by SBNO order by VAL) -1 ) / 3 
         from YourTable
       ) src
 Pivot (max(VAL) for Test_Name in ([Test1],[Test2],[Test3] ) ) pvt
 Order By SBNO,RowNr

退货

SBNO    RowNr   Test1   Test2   Test3
1       0       A       B       C
1       1       D       NULL    NULL
2       0       A       B       C
2       1       D       NULL    NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多