0

我有这样的数据

 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 中拥有它?

4

2 回答 2

2

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

于 2013-11-10T08:39:56.207 回答
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
于 2013-11-10T08:47:55.703 回答