我将直接通过一个例子来解释。假设我有一个包含3列的表格。
现在我想要实现的是,我希望每个列的第一个值成为一个列。所以它会是这样的,
我在这里尝试了一些问题,包括使用TOP 1
和其他不正确的方法。但我仍然缺少一些能够达到确切输出的东西。
在这里需要一些指导如何实现这一目标。谢谢。
答案 0 :(得分:2)
样本表
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
如果您需要特定的第二行,您可以执行以下操作
<强> QUERY 强>
;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
答案 1 :(得分:0)
您可以使用concat()函数创建一个由所有所需值组成的列
答案 2 :(得分:0)
只需你可以尝试一下。如果想要特定的行使用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
答案 3 :(得分:0)
这可能对您有所帮助
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
答案 4 :(得分:0)
如果这真的是你想要的:“我希望每个列的第一个值成为一个列”,它将是:
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