Tsql 如何获取单行上的数据

Tsql 如何获取单行上的数据,tsql,Tsql,我有一张名为RUGS的表格,数据如下。如何编写TSQl查询以获取输出中所示的数据。我不熟悉unPIVOT `cono ARtype日收入PPD 140 MCD 5 1000 500 140 MRA 6 2000 600 140 MRA 7 3000 700 141 MCD 1 5000 100 141 MRA 2 6000 200 141 MRA 3700300` 结果 140 MCD 5 1000 500 MRA 6 2000 600 MRA 7 3000 700 141 MCD 1 5000

我有一张名为RUGS的表格,数据如下。如何编写TSQl查询以获取输出中所示的数据。我不熟悉unPIVOT

`cono ARtype日收入PPD

140 MCD 5 1000 500

140 MRA 6 2000 600

140 MRA 7 3000 700

141 MCD 1 5000 100

141 MRA 2 6000 200

141 MRA 3700300`

结果

140 MCD 5 1000 500 MRA 6 2000 600 MRA 7 3000 700


141 MCD 1 5000 100 MRA 2 6000 200 MRA 3 7000 300

鉴于每个
cono
将有3条记录(如注释中所述),带
行号的
cte
可与案例陈述一起使用

如果任何记录少于三条,您将在结果中看到空白和零。任何超过三条的记录都不能代表所有记录

下面是一个以
@RUGS
作为表变量的示例:

declare @RUGS table (cono int, ARType char(3), [days] int, Revenue int, PPD int)

insert into @RUGS VALUES
(140,'MCD',5,1000,500)
,(140,'MRA',6,2000,600)
,(140,'MRA',7,3000,700)
,(141,'MCD',1,5000,100)
,(141,'MRA',2,6000,200)
,(141,'MRA',3,7000,300);

with cte as 
(
    select row_number() over(partition by cono order by (select 1)) as rn, * from @RUGS
)

select cono, 
    max(case when rn = 1 then ARType else '' end) as ARType1, 
    max(case when rn = 1 then days else '' end) as days1, 
    max(case when rn = 1 then Revenue else '' end) as Revenue1, 
    max(case when rn = 1 then PPD else '' end) as PPD1,
    max(case when rn = 2 then ARType else '' end) as ARType2, 
    max(case when rn = 2 then days else '' end) as days2, 
    max(case when rn = 2 then Revenue else '' end) as Revenue2, 
    max(case when rn = 2 then PPD else '' end) as PPD2,
    max(case when rn = 3 then ARType else '' end) as ARType3, 
    max(case when rn = 3 then days else '' end) as days3, 
    max(case when rn = 3 then Revenue else '' end) as Revenue3, 
    max(case when rn = 3 then PPD else '' end) as PPD3      
from cte group by cono

您如何决定列顺序?每个id是否总是有3条记录?如果更多或更少呢?是的-每个cono都有3个记录。cono应该只在3条记录中出现一次。您以前问过完全相同的问题,请不要问crystal reports中的两个问题。现在我需要一个Tsql查询