试图找出如何进行查询以便以理想的方式给我结果:
Table Cars:
car_id Make Model Color
1 Ford Focus Red
2 Ford Fiesta Silver
3 Honda Accord Silver
从car_id = 1
的汽车中选择Car_id 1
Make Ford
Model Focus
Color Red
所以非常需要一个列并将其转换为一行。使用SQL 2005(我将使用它作为数据库)。
由于
答案 0 :(得分:2)
这是一个简单的方法:
;with a as
(
select id, make, model, color
from cars
where id = 1
)
select 'Car_id' [Col1], cast(Car_id as varchar(10)) [Col2]
from a
union all
select 'make', make
from a
union all
select 'Model', Model
from a
union all
select 'Color', Color
from a
答案 1 :(得分:1)
它比你想象的要简单,你可以将这些列连接成一列,一列的值成为结果行:
SELECT CarModel + ' ' + CarMake + ' ' + CarColor AS MyColumn FROM MyTable
答案 2 :(得分:1)
我们可以为任何查询编写通用解决方案。
--sample table
SELECT * INTO #cars
FROM ( SELECT 1 car_id, 'Ford' Make, 'Focus' Model,'Red' Color
UNION all
SELECT 2 car_id, 'Ford' Make, 'Fiesta' Model,'Silver' Color
UNION ALL
SELECT 3 car_id, 'Honda' Make, 'Accord' Model,'Silver' Color
) x
--selected record to #tmp
SELECT * INTO #tmp FROM #cars WHERE car_id=1
--generic solution
DECLARE @sql VARCHAR(max)
SET @sql=''
SELECT @sql=@sql + 'SELECT '''+Name+''' as ColumnName,
cast(['+Name+'] as varchar(500)) as Value FROM #tmp union all '
FROM tempdb.sys.columns
where object_id=object_id('tempdb..#tmp')
SET @sql = LEFT(@sql,LEN(@sql)-9) -- except last 'union all'
EXEC( @sql)
DROP TABLE #tmp,#cars
答案 3 :(得分:0)
怎么样
declare @mytable table(car_id int, Make varchar(10), model varchar(10), color varchar(10))
insert @mytable values(1,'Ford','Focus','Red')
insert @mytable values(2,'Ford','Fiesta','Silver')
insert @mytable values(3,'Honda','Accord','Silver')
select 'Car_id ' +convert(varchar, car_id)+char(10)+char(13)+
'Make ' + Make + char(10)+char(13)+
'Color '+color
from @mytable
where car_id = 1