SQL 将每列的单个值放入单个列的服务器查询

SQL Server query for getting single value from each column into a single column

我直接举例说明。假设我有一个 table,它有 3 列,如图所示。

现在我想要实现的是,我希望将每个单独列的第一个值合并到一个列中。所以它会是这样的,

我在这里尝试了一些查询,包括使用 TOP 1 和其他不正确的方式。但我仍然缺少一些东西来实现准确的输出。

这里需要一些关于如何实现这一点的指导。谢谢。

您可以使用 concat() 函数创建一个包含所有所需值的列

More info here

样本TABLE

SELECT * INTO #TEMP
FROM
(
    SELECT 1 BATCH_ID,'AAA' ASSIGNMENTTITLE,'FILE' ASSIGNMENTTYPE
    UNION ALL
    SELECT 1,'AAA1','FILE'
    UNION ALL
    SELECT 1,'AAA','FILE'
  )TAB

如果您特别需要第二行,可以执行以下操作

查询

;WITH CTE AS
(
    -- Order row according to default format
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT(0))) RNO,*
    FROM #TEMP
)
SELECT CAST(BATCH_ID AS VARCHAR(20)) FROM CTE WHERE RNO=2
UNION ALL
SELECT ASSIGNMENTTITLE FROM CTE  WHERE RNO=2
UNION ALL
SELECT ASSIGNMENTTYPE FROM CTE  WHERE RNO=2

更新

由于每条记录中有 3 个项目,因此可能会感到困惑,除非一条记录中的每个项目都有一个列。

;WITH CTE AS
(
    -- Order row according to default format
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT(0))) RNO,*
    FROM #TEMP
)
SELECT CAST(BATCH_ID AS VARCHAR(20)),RNO 
FROM CTE 
UNION ALL
SELECT ASSIGNMENTTITLE,RNO  
FROM CTE  
UNION ALL
SELECT ASSIGNMENTTYPE,RNO  
FROM CTE  
ORDER BY RNO

简单你可以试试这个。如果想要特定于一行,请使用 rowid。对于所有列使用 unpivot

create table #temp(id int, name varchar(100), title varchar(100))
insert into #temp values(1,'aaa','file')
insert into #temp values(1,'aaas','filef')
insert into #temp values(1,'aaaww','filefs')

select * from #temp
select top 1 cast(id as varchar) title from #temp
union
select top 1 name from #temp
union
select top 1 title from #temp

drop table #temp

这可能对您有所帮助

select top 1 convert(varchar(10), batch_id) ASSIGNMENTTITLE from table
union all
select top 1 ASSIGNMENTTITLE  from table
union all
select top 1 ASSIGNMENTTYPE  from table

如果这真的是您想要的:"I want the first values of each individual column into a single column" 它将是:

select ASSIGNMENTTITLE
from (
select min(convert(varchar(10), batch_id)) ASSIGNMENTTITLE, 
1 ColOrder from table
union all
select min(ASSIGNMENTTITLE),
2 ColOrder from table
union all
select min(ASSIGNMENTTYPE), 
3 ColOrder from table
) as data
order by ColOrder