如何从select中计算每一行

时间:2017-06-05 08:32:12

标签: sql-server tsql

我想从我的表中提取数据,我希望得到这个结果:

1 Valore
2 Valore
3 Valore
4 Valore

所以我想计算从1到N的每个ROW。

这是我的查询但不起作用:

  SELECT COUNT(DISTINCT dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName)) AS Count, 
         dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName) AS NAME
    FROM AA_V_PHR_CCD_ResultsObservation R INNER JOIN 
         AA_V_PHR_CCD_ResultsObservationXLanguages RR   ON R.ID = RR.ID
   WHERE CodeSystem = '123456789'
GROUP BY dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName)
  

修改

我的数据库是Tsql

这是我的提取数据:

1 Valore
1 Pippo
1 Pluto

而不是

1 Valore
2 Pippo
3 Pluto

4 个答案:

答案 0 :(得分:2)

计数不会每行更改;每次都有相同的行数;你似乎想要的不是计数,而是行数。

要获取行号,您需要使用the ROW_NUMBER API;例如:

SELECT ROW_NUMBER() OVER (
   ORDER BY dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName)) as [Position],
dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName) as [Name]
...
ORDER BY dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName)

但是,除非您实际分区(因此每个分区获得一个行号),否则在接收客户端处理它会更容易。

答案 1 :(得分:1)

你可以使用rownum函数。这将特定于您使用的每个数据库,但这是来自oracle的示例:

Select rownum, <ColumnList> from 
       (select <ColumnList> ...)

TSQL documentation表示等效的是ROW_NUMBER()函数。

对于TSQL:

Select ROW_NUMBER() OVER
   ([PartitionBy] OrderByClause), <ColumnList>...

答案 2 :(得分:1)

这应该做的工作:

SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS Count, 
     dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName) AS NAME
FROM AA_V_PHR_CCD_ResultsObservation R INNER JOIN 
     AA_V_PHR_CCD_ResultsObservationXLanguages RR   ON R.ID = RR.ID
WHERE CodeSystem = '123456789'
GROUP BY dbo.F_ElementStringFromCodeDescription(RR.ID, RR.DisplayName)

答案 3 :(得分:0)

这是我的解决方案是最快的

CREATE TABLE Test (
  ID INT PRIMARY KEY,
  VAL VARCHAR(64));

INSERT INTO Test (ID,VAL) VALUES (8,"a"),(156,"b"),(99,"c");

SET @t1=0;
SELECT @t1:=@t1 + 1 as 'num', VAL FROM Test;

OUT

num | VAL
1   | a
2   | c
3   | b