在TSQL命令上处理

时间:2013-11-10 08:36:26

标签: sql-server linq tsql

我有这样的数据

 Id  TagNo   CoreNo     FromLocation    Device    FromTerminal
  1   1000     1           AA             A1         11
  2   1000     2           AA             A1         12
  3   1000     3           AA             A2         13
  4   1000     4           AA             A2         14
  5   1001     1           BB             T1         10

我想要这个

   TagNo   CoreNo     FromLocation    Device    FromTerminal
    1000     1           AA             A1         11
             2                                     12
             3                          A2         13
             4                                     14
    1001     1           BB             T1         10

我怎样才能在TSQL / linq中使用它?

2 个答案:

答案 0 :(得分:2)

格式化显示数据是使用数据而非数据库的应用程序的作业。 T-SQL中没有特定的命令可以执行您想要的操作。

答案 1 :(得分:0)

可以这样做,但这通常由报告引擎(或类似)处理。

以下查询为每组重复值创建一个行号(ROW_NUMBER)。然后它只通过使用CASE来选择相应行号为1的值。

with mt as (
  select 
    ROW_NUMBER() over (partition by tagNo order by Id) as TagRowNr, 
    ROW_NUMBER() over (partition by tagNo,FromLoc order by Id) as FromLocRowNr, 
    ROW_NUMBER() over (partition by tagNo,Device order by Id) as DeviceRowNr, 
    Id, TagNo, Core, FromLoc, Device, FromTerm
  from MyData
)
select 
  Case when TagRowNr=1 then TagNo else '' end as TagNo,
  CoreNo,
  Case when FromLocRowNr=1 then FromLoc else '' end as FromLoc,
  Case when DeviceRowNr=1 then Device else '' end as Device,
  FromTerm
from mt
Order by Id