Sql server 从2个Select语句中输出不同的列
我想实现这样的目标 例如 输出:Sql server 从2个Select语句中输出不同的列,sql-server,row,Sql Server,Row,我想实现这样的目标 例如 输出: COUNTER BAGGAGE 1234 1235 脚本: SELECT ID, VALUE, NAME FROM table WHERE ID = 1 UNION ALL SELECT ID, VALUE, NAME FROM table WHERE ID = 2 结果: ID VALUE NAME 1 1234 COUNTER 2 1235 BAGGAGE 这是一种从行到列的方法吗?试试这个: select id,case when
COUNTER BAGGAGE
1234 1235
脚本:
SELECT ID, VALUE, NAME FROM table WHERE ID = 1
UNION ALL
SELECT ID, VALUE, NAME FROM table WHERE ID = 2
结果:
ID VALUE NAME
1 1234 COUNTER
2 1235 BAGGAGE
这是一种从行到列的方法吗?试试这个:
select id,case when name='counter' then value else ' ' end as counter,
case when name='baggage' then value else ' ' end as baggage
from table
它输出
id counter baggage
1 1234
2 1235
在本例中,使用下面的查询。它不是很通用,但在特定情况下可能就足够了,因为它简单易用
select
(select top 1 value from yourtable where name = 'counter') as counter,
(select top 1 value from yourtable where name = 'baggage') as baggage
您可以使用这样的
DECLARE @DataSource TABLE
(
[ID] TINYINT
,[VALUE] SMALLINT
,[Name] VARCHAR(12)
)
INSERT INTO @DataSource ([ID],[VALUE],[Name])
VALUES (1,1234,'COUNTER')
,(2,1235,'BAGGAGE')
SELECT [COUNTER]
,[BAGGAGE]
FROM
(
SELECT [VALUE]
,[Name]
FROM @DataSource
) AS DS
PIVOT
(
MAX([VALUE]) FOR [Name] IN ([COUNTER], [BAGGAGE])
) AS PVT
输出:
COUNTER BAGGAGE
1234 1235
检查。另一种标准溶液
select max(case when name='counter' then value end) as counter,
max(case when name='baggage' then value end) as baggage
from table
从表中选择TOP 1*只会返回最上面的记录,我不认为这是问题附近的某个地方?这回答了OP,但它违反了我认为的ID??这就是为什么我说它可以使用,但不是完全通用的。如果要使用ID来区分柜台和行李,则可以在没有暗示的情况下使用,PIVOT仅可用>=2005 MS SQL版本,无论如何,可能是完美的解决方案。