Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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_Sql Server_Tsql - Fatal编程技术网

Sql 基于两列的透视

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,这将无法扩展。如果你有许多轴列,

数据可能如下所示:

身份证件 液体 基德 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,这将无法扩展。

如果你有许多轴列,那么行数是你最好的选择。但是,既然您说您保证始终有两行,那么有一个较短的选项:

选择 身份证件 分钟作为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