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版本,无论如何,可能是完美的解决方案。