假设我有三组记录,如
Actno Sufix Amount
000005 230 101000
000005 535 100000
000005 630 -500000
000009 230 222000
000009 535 120000
000009 635 220000
我需要将其显示为
000005 230 101000 535 100000 630 -500000
000009 230 222000 535 120000 635 220000
这可能在SQL中吗?有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
如果您知道每个Actno有三个注册,则可以执行此操作
;with cte as
(
select *,
row_number() over(partition by Actno order by Sufix) as rn
from [YourTable]
)
select
C.Actno,
min(C1.Sufix),
min(C1.Amount),
min(C2.Sufix),
min(C2.Amount),
min(C3.Sufix),
min(C3.Amount)
from cte as C
inner join cte as C1
on C.Actno = C1.Actno and C1.rn = 1
inner join cte as C2
on C.Actno = C2.Actno and C2.rn = 2
inner join cte as C3
on C.Actno = C3.Actno and C3.rn = 3
group by C.Actno
order by C.Actno
答案 1 :(得分:0)
不,这在SQL中是不可能的。
它也不是SQL的用途;演示文稿不是SQL的工作。
如果您认为需要将列数据放入行中,那么您的想法就是组织不适合关系数据库的数据。那就是你应该看的地方。
答案 2 :(得分:0)
如果您不介意聚合行在字符串上(并且您使用的是Oracle),我曾经做过类似的事情:
CREATE OR REPLACE FUNCTION APPEND_FIELD(sqlstr in varchar2,
sep in varchar2)
return varchar2 is
ret varchar2(4000) := '';
TYPE cur_typ IS REF CURSOR;
rec cur_typ;
field varchar2(4000);
begin
OPEN rec FOR sqlstr;
LOOP
FETCH rec
INTO field;
EXIT WHEN rec%NOTFOUND;
ret := ret || field || sep;
END LOOP;
if length(ret) = 0 then
RETURN '';
else
RETURN substr(ret, 1, length(ret) - length(sep));
end if;
end;
/
select
actno,
sufix,
amount,
APPEND_FIELD('select sufix '''||' '||'''amount
from table tt
where tt.actno = '||t.actno||' and sufix != 230 ',' ')
from table t
where sufix=230;
HTH