Sql 无聚合函数的旋转
是否可以从透视查询中删除聚合函数 我对此查询有问题,因为如果我有相同生日的员工,则只会显示第一个Sql 无聚合函数的旋转,sql,sql-server,pivot,aggregate-functions,Sql,Sql Server,Pivot,Aggregate Functions,是否可以从透视查询中删除聚合函数 我对此查询有问题,因为如果我有相同生日的员工,则只会显示第一个 SELECT * FROM ( SELECT lastname +' '+ firstname as name, Birthdate, CASE WHEN DATEPART(yyyy,Birthdate) BETWEEN 1930 AND 1939 THEN 1930 WHEN DATEPART(yyyy,Birthdate) BETWEEN 19
SELECT *
FROM ( SELECT lastname +' '+ firstname as name, Birthdate,
CASE
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1930 AND 1939 THEN 1930
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1940 AND 1949 THEN 1940
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1950 AND 1959 THEN 1950
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1960 AND 1969 THEN 1960
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1970 AND 1979 THEN 1970
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1980 AND 1989 THEN 1980
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1990 AND 1999 THEN 1990
WHEN DATEPART(yyyy,Birthdate) BETWEEN 2000 AND 2009 THEN 2000
ELSE DATEPART(yyyy,Birthdate) END as [BDate] FROM ADR_Address
) as s
PIVOT
(
MAX(name)
FOR [BDate] IN ([1930],[1940],[1950],[1960],[1970],[1980],[1990],[2000])
)AS pvt
WHERE Birthdate IS NOT NULL ORDER BY Birthdate
如果我对代码理解正确,您可以在数据透视行中添加另一个分隔符,例如行号。因此,在数据透视行上,您将使用Birthdays+原始行号,而不是Birthdays 通过这种方式,您可以从技术上显示所有名称,但这种轴心仍然很奇怪:
SELECT *
FROM ( SELECT lastname +' '+ firstname as name, Birthdate,
CASE
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1930 AND 1939 THEN 1930
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1940 AND 1949 THEN 1940
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1950 AND 1959 THEN 1950
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1960 AND 1969 THEN 1960
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1970 AND 1979 THEN 1970
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1980 AND 1989 THEN 1980
WHEN DATEPART(yyyy,Birthdate) BETWEEN 1990 AND 1999 THEN 1990
WHEN DATEPART(yyyy,Birthdate) BETWEEN 2000 AND 2009 THEN 2000
ELSE DATEPART(yyyy,Birthdate) END as [BDate]
,ROW_NUMBER() OVER (ORDER BY lastname +' '+ firstname) AS rn FROM ADR_Address
) as s
PIVOT
(
MAX(name)
FOR [BDate] IN ([1930],[1940],[1950],[1960],[1970],[1980],[1990],[2000])
)AS pvt
WHERE Birthdate IS NOT NULL ORDER BY Birthdate
只需更改查询的这一部分:
SELECT lastname +' '+ firstname as name,
Birthdate,
...
关于这一点:
SELECT lastname +' '+ firstname as name,
Birthdate,
ROW_NUMBER() OVER (ORDER BY Birthdate) as rn,
...
你能添加一些样本数据吗?还有一个提示:如果您使用DATEPARTyyyy,Birthdate/10*10,您不需要完整的案例陈述,而且当新的生日出现时,您也不需要添加到案例中。您希望得到什么结果?@user2210516 Y您没有投票权或接受答案吗?
SELECT lastname +' '+ firstname as name,
Birthdate,
ROW_NUMBER() OVER (ORDER BY Birthdate) as rn,
...