数据行列转换(100分)

  • 主题发起人 主题发起人 qiqi0715
  • 开始时间 开始时间
Q

qiqi0715

Unregistered / Unconfirmed
GUEST, unregistred user!
我有如下数据
用select得到的.
缺陷1 150
缺陷2 120
缺陷4 100

现在我又新建了个表
如何查询得到下面的类型.
缺陷1 缺陷2 缺陷3 缺陷4
150 120 100

那么在DELPHI中用SQL该怎样实现?
用了case后变成
150 0 0 0
0 120 0 0
0000
0 0 0 100
但这不是我所要的.
 
var
sl:tstringlist;
i:integer;
...
with adoquery1 do
begin
close;
sql.clear;
sql.text:='select * from t1'
open;
end;
sl:=tstringlist.create;
for i:=0 to adoquery1.recordcount-1 do
begin
sl.string:=adoquery1.fieldvalues['a'];
end;
with adoquery2 do
begin
close;
sql.clear;
sql.text:='create table t2 (sl[0] int,sl[2] int...........)
execsql;
end;
然后intsert into t2 ........
最后,来看看我的问题:
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=3633759
 
case when .....then ....else....end
 
To qiqi0715
问题描述:
假设,你有一张名为BugNames(ID int, BugName nvarchar(64))的数据表,用于存放缺陷清单,还有一张名为BugList(ID int, BugID int, Quantity int)用于存放缺陷数据。

BugNames Data
ID BugName
1 缺陷1
2 缺陷2
3 缺陷3
4 缺陷4

BugList
ID BugID Quantity
1 1 150
2 2 120
3 3 0
4 4 100

现在欲得到如下结果
缺陷1 缺陷2 缺陷3 缺陷4
150 120 0 100

实现:
declare @s nvarchar(4000)
set @s = 'select '
select @s = @s + 'sum(case BugName when '''+BugName+''' then Quantity else 0 end) as ['+BugName+'],'
from (select distinct BugName from BugNames) a

set @s = substring(@s, 1, len(@s) - 1)
select @s = @s + ' From BugList left join BugNames on BugList.BugID = BugNames.ID'
--print @s
exec(@s)
 
其实用case可以了...加个sum就行了吗.
 
后退
顶部