Sql 基于两列的透视
数据可能如下所示: 身份证件 液体 基德 A. 1. 3. A. 12 3. 假设ID和GID是分组列,如下所示: 以RNs为例 选择ID, UID, 基德, 按ID分区上的行数,按UID作为RN的GID顺序 从dbo.YourTable 选择UPPERID+LOWERID作为ID, MAXCASE RN当1时,则UID结束为UID1, MAXCASE RN当1时,则UID结束为UID2, 基德 来自RNs 按ID分组, GID;Sql 基于两列的透视,sql,sql-server,tsql,Sql,Sql Server,Tsql,数据可能如下所示: 身份证件 液体 基德 A. 1. 3. A. 12 3. 假设ID和GID是分组列,如下所示: 以RNs为例 选择ID, UID, 基德, 按ID分区上的行数,按UID作为RN的GID顺序 从dbo.YourTable 选择UPPERID+LOWERID作为ID, MAXCASE RN当1时,则UID结束为UID1, MAXCASE RN当1时,则UID结束为UID2, 基德 来自RNs 按ID分组, GID; 当然,如果你有3个以上的UID,这将无法扩展。如果你有许多轴列,
当然,如果你有3个以上的UID,这将无法扩展。如果你有许多轴列,那么行数是你最好的选择。但是,既然您说您保证始终有两行,那么有一个较短的选项: 选择 身份证件 分钟作为UID1, 当COUNT*>1时,则MAXUID结束为UID2, 基德 来自CTE 按ID分组,GID
如果“A”有3行,会发生什么?为什么它的值从'A'变为'Aa'?在您的示例中,每个组只有2行,是的,但我想问您是否可以有更多行。
WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER(PARTITION BY [ID] ORDER BY [ID]) AS Rn FROM yourtable
)
select
ID,
MAX(case when RN = 1 then UID end) UID1,
MAX(case when RN = 2 then UID end) UID2,
GID
from CTE
GROUP BY ID,GID