拜求sql语句,把两条记录合并为一条

SQLserver数据库中原有表DemandQuantity,表的结构如下:DemandNodeIDMaterialIDQuantity11300012500021200... SQL server数据库中原有表DemandQuantity,表的结构如下:

DemandNodeID MaterialID Quantity
1 1 3000
1 2 5000
2 1 2000
2 2 1000
....
合并后表示为:
DemandNodeID Material1Quantity Marerial2Quantity
1 3000 5000
2 2000 1000
....
拜求大神指点小弟!
展开
 我来答
李晓健
2013-07-17 · TA获得超过183个赞
知道小有建树答主
回答量:293
采纳率:0%
帮助的人:191万
展开全部
select DemandNodeID,(select t1.Quantity from DemandQuantity t1,Quantity where t1.DemandNodeID=t.DemandNodeID and t1.MaterialID =1) Material1Quantity
,(select t2.Quantity from DemandQuantity t2,Quantity where t2.DemandNodeID=t.DemandNodeID and t2.MaterialID =2) Marerial2Quantity

from DemandQuantity t group by t.DemandNodeID
追问
每次执行程序的时候原表中的Material种类数都可能不一样,也就是说以后可能还会有MaterialID=3,4,5…的情况,但总种数应该不会超过20…

那么是不是只能在存储过程中生成临时表呢供.Net程序调用呢?我最终需要把拼接后的表传给.Net程序,拜求大神指点!
追答
你可以先执行一个sql 查询 出MaterialID的最大值,然后用程序循环拼出这个sql
micro0369
2013-07-17 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4000万
展开全部
select demandnodeid,
(select b.quantity from DemandQuantity b where a.DemandNodeID = b.DemandNodeID and b.materialid = 1) Material1Quantity,
(select b.quantity from DemandQuantity b where a.DemandNodeID = b.DemandNodeID and b.materialid = 2) Material1Quantity
from
(select distinct demandnodeid from DemandQuantity) a
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
walkmens
2013-07-17 · TA获得超过452个赞
知道小有建树答主
回答量:489
采纳率:100%
帮助的人:264万
展开全部
select demandnodeid,(select Quantity from tb a where a.demandnodeid=demandnodeid and materiaiid=1) Material1Quantity ,(select Quantity from tb b where b.demandnodeid=demandnodeid and materiaiid=2) Marerial2Quantity from tb
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0821056
2013-07-17 · TA获得超过407个赞
知道小有建树答主
回答量:756
采纳率:0%
帮助的人:351万
展开全部
SELECT DemandNodeID, [1] Material1Quantity, [2] Marerial2Quantity FROM (SELECT * FROM DemandQuantity) t1 PIVOT (SUM([Quantity]) FOR [MaterialID] IN ([1], [2])) t2
追问
每次执行程序的时候原表中的Material种类数都可能不一样,也就是说以后可能还会有MaterialID=3,4,5…的情况,但总种数应该不会超过20…

那么是不是只能在存储过程中生成临时表呢供.Net程序调用呢?我最终需要把拼接后的表传给.Net程序,拜求大神指点!
追答
用动态SQL可以解决。计算所有的列,拼接成SQL,再调用EXEC执行SQL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinhelan
2013-07-17 · 超过11用户采纳过TA的回答
知道答主
回答量:68
采纳率:100%
帮助的人:30万
展开全部
这是行转列吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qinglong0825
2013-07-17
知道答主
回答量:11
采纳率:0%
帮助的人:6.4万
展开全部
DemandNodeID有很多么?还是就1和2?
追问
可能还会增加……每次执行程序的时候原表中的Material种类数都可能不一样,所以是不是只能在存储过程中生成临时表呢?我最终需要把拼接后的表传给.Net程序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式