拜求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
....
拜求大神指点小弟! 展开
DemandNodeID MaterialID Quantity
1 1 3000
1 2 5000
2 1 2000
2 2 1000
....
合并后表示为:
DemandNodeID Material1Quantity Marerial2Quantity
1 3000 5000
2 2000 1000
....
拜求大神指点小弟! 展开
6个回答
展开全部
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
,(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
展开全部
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
(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
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是行转列吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
DemandNodeID有很多么?还是就1和2?
追问
可能还会增加……每次执行程序的时候原表中的Material种类数都可能不一样,所以是不是只能在存储过程中生成临时表呢?我最终需要把拼接后的表传给.Net程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询