Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL添加前缀_Sql_Sorting_Row Number - Fatal编程技术网

SQL添加前缀

SQL添加前缀,sql,sorting,row-number,Sql,Sorting,Row Number,我有一个select查询,看起来像 Type Cause Impact Enhancement Data Transfer Cosmetic Enhancement Data Transfer User Engagement Enhancement Front End Cosmetic Enhancement Front End User Engagement Question Data Transfer Cosmeti

我有一个select查询,看起来像

Type Cause Impact Enhancement Data Transfer Cosmetic Enhancement Data Transfer User Engagement Enhancement Front End Cosmetic Enhancement Front End User Engagement Question Data Transfer Cosmetic Question Front End User Engagement Issue Data Transfer Cosmetic Issue Front End User Engagement 我需要将select查询变成这样

Type Cause Impact 1.Enhancement 1.Data Transfer 11.Cosmetic 1.Enhancement 2.Data Transfer 12.User Engagement 1.Enhancement 3.Front End 13.Cosmetic 1.Enhancement 4.Front End 14.User Engagement 2.Issue 1.Data Transfer 21.Cosmetic 2.Issue 2.Front End 22.User Engagement 3.Question 1.Data Transfer 31.Cosmetic 3.Question 2.Front End 32.User Engagement 基本上,第一列的每个唯一值都有相同的前缀,第二列的每个唯一值都有增量,并重置每个第一列的值。第三列只是第一列和第二列的组合。根据字母升序增加值


我想这和行号和分区有关你在找这样的东西吗

select (dense_rank() over (order by type) || '.' || type) as ntype,
       (row_number() over (partition by type order by cause, impact)) || '.' || cause as ncause,
       (dense_rank() over (order by type) || row_number() over (partition by type order by cause, impact)) || '.' ||  impact) as nimpact
from t
order by ntype, ncause, nimpact;

这是我的答案,但还有更简单的吗

Select t1.Type,t1.Cause,Cast(t2.rnType as VARCHAR(9))+Cast(t3.rnCause as VARCHAR(9))+'.'+t1.Impact,t1.Tickets FROM (SELECT [Type] as Type,(Case WHEN [Cause]='' THEN 'null' ELSE [Cause] END) as Cause,(Case WHEN [Impact]='' THEN 'null' ELSE [Impact] END) as Impact,count([Id]) as Tickets FROM {SupportTicket} GROUP BY [Type],(Case WHEN [Cause]='' THEN 'null' ELSE [Cause] END),(Case WHEN [Impact]='' THEN 'null' ELSE [Impact] END)) t1 LEFT JOIN (SELECT [Type] as Type,dense_rank() over (ORDER By [Type]) as rnType FROM {SupportTicket} GROUP BY [Type]) t2 ON t1.Type=t2.Type LEFT JOIN (SELECT [Type] as Type,[Cause] as Cause,dense_rank() over (PARTITION BY [Type] ORDER By [Cause]) as rnCause FROM {SupportTicket} GROUP BY [Type],[Cause]) t3 ON t1.Type=t3.Type and t1.Cause=t3.Cause
也许像

SELECT 
  concat(typeInc, '.', Type) as Type,
  concat(causeInc, '.', Cause) as Cause,
  concat(typeInc, causeInc, '.', Impact) as Impact
FROM (
  SELECT 
    TypeInc = DENSE_RANK() OVER (ORDER BY Type),
    CauseInc = ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Cause),
    *
  FROM tbl
  ) withInc
 ORDER by Type, Cause, Impact;
演示

SQL 2008兼容版本

SELECT 
  typeInc + '.' + Type as Type,
  causeInc + '.' + Cause as Cause,
  typeInc + causeInc + '.' + Impact as Impact
FROM (
  SELECT 
    TypeInc = CAST(DENSE_RANK() OVER (ORDER BY Type) AS varchar(3)),
    CauseInc = CAST(ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Cause) AS varchar(3)),
    *
  FROM tbl
  ) withInc
 ORDER by Type, Cause, Impact;

演示

行的排序顺序是什么?是否有未显示的密钥?默认排序。增强问题和问题的前缀可以是任何。我只是需要它的格式。我考虑过使用densite_rank选择第一行,n按类型使用row_number分区进行连接。请准确地查看ya,也许可以使用前两列中的前缀。这也是一个适用于2008 sql的查询:“| |语法适用于较新的sql?”?我使用2008 r2。请看下面我的答案,但不知道是否有更简单的问题。@DavidChen…|124;是字符串连接的SQL标准运算符。您的问题没有所用数据库的标记,因此使用标准语法。很遗憾,我的公司使用的是sql 2008:/只需使用+而不是concat来添加字符串,并将排名数字转换为'varchars'。最新答案