sql server ,求sql 语句把单列的数据分为多行显示

现有表A中的数据结构是这样的月份费用金额09诊疗费10009治疗费20009注射费10009护理费110后面还有很多数据想要的结果是月份费用金额费用金额09诊疗费100治... 现有表A中的数据结构是这样的

月份 费用 金额
09 诊疗费 100
09 治疗费 200
09 注射费 100
09 护理费 110 后面还有很多数据

想要的结果是
月份 费用 金额 费用 金额
09 诊疗费 100 治疗费 200
09 注射费 100 其他费 110
求大神帮忙啊!!
展开
 我来答
17号观察室
2013-10-12 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1353万
展开全部
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 费用 from a group by 费用
set @sql = '[' + @sql + ']'
exec ('select * from (select * from a) a pivot (max(金额) for 费用 in (' + @sql + ')) b')
追问
这样写会把所有费用都放在一行啊!我需要一行只放两个项目和金额,剩下的弄到下一行去,大神有法子没
匿名用户
2013-10-12
展开全部
-- 较长,凑合用吧,表名test, 三个字段分别设为yf,fy,je

select
yf,
max(case when fy in ('诊疗费','注射费') then fy else null end),
max(case when fy in ('诊疗费','注射费') then je else null end),
max(case when fy in ('治疗费','其他费') then fy else null end),
max(case when fy in ('治疗费','其他费') then je else null end)
from (select
t.*,
case
when fy in ('诊疗费','治疗费') then 1
when fy in ('注射费','其他费') then 2
end grp
from (select yf,fy,je from test where fy in ('诊疗费','治疗费','注射费')
union all
select yf,'其他费' fy,sum(je)je from test
where fy not in ('诊疗费','治疗费','注射费')
group by yf) t) t1
group by yf,grp

-- 下面这个语句仅供参考,为其他费用不需汇总时提供一个思路

select
yf,
max(case when id%2 <> 0 then fy else null end),
max(case when id%2 <> 0 then je else null end),
max(case when id%2 = 0 then fy else null end),
max(case when id%2 = 0 then je else null end)
from
(select
t1.*,
case when id % 2 = 0 then id - 1 else id end grp
from (select
t.*,row_number()over(order by yf) id
from test t) t1) t2
group by yf,grp
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友59439df
2013-10-12 · TA获得超过219个赞
知道小有建树答主
回答量:135
采纳率:100%
帮助的人:124万
展开全部
通过记录行循环或cusor进行处理,插入新的表变量或临时表中,表的结构为想要的结果,然后显示出来就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhao897567033
2013-10-12 · TA获得超过148个赞
知道小有建树答主
回答量:184
采纳率:100%
帮助的人:68.4万
展开全部
你可以把这个表关联两次,取别名A、B。然后第一列单费用取A表中单,后边的费用取B表的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魂羽94
推荐于2018-01-23
知道答主
回答量:15
采纳率:66%
帮助的人:4.1万
展开全部
你这就没有唯一号吗?没有规律可寻啊,你需要把所有规律都写出来 然后套用case when语句

大概是这样的 case when (月份=‘09’and 费用=‘诊疗费’ then 月份,费用1,金额,费用2,金额2 when 月份.....)
像这样如此往复
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
云天英雄3
2013-10-12 · TA获得超过702个赞
知道小有建树答主
回答量:891
采纳率:100%
帮助的人:323万
展开全部
这个用前端设计;用单纯的查询输出这样的结果,比较复杂,也牺牲性能~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式