我想从我的表中提取数据,我希望得到这个结果:
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
答案 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