一个查询查询问题

HZ23 2020-09-18 09:49:51
我有一张表如下所示:
productBar为产品编码,step为组装序号,timeUsed为组装用时。
也就是一个产品必须要经过1,2,3,4个步骤,才算组装成功,像2001000001为成功,2001000002为失败。
我的问题是:
1、如何用sql语句查出那些编码是成功的以及总的组装用时;
2、那些编码是失败的;

谢谢各位!

...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2020-09-19
  • 打赏
  • 举报
回复
SELECT   productBar AS 产品编码 ,
         CASE WHEN COUNT(step) =4 THEN '成功' ELSE '失败' END AS 组装序号状态 ,
         SUM(timeUsed) AS 组装用时
FROM     product
GROUP BY productBar;
吉普赛的歌 2020-09-19
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL
DROP TABLE t
GO
CREATE TABLE t(
	productBar VARCHAR(10),
	step INT,
	timeUsed INT	
)
GO
INSERT INTO t VALUES('2001000001',1,10);
INSERT INTO t VALUES('2001000001',2,13);
INSERT INTO t VALUES('2001000001',3,12);
INSERT INTO t VALUES('2001000001',4,18);

INSERT INTO t VALUES('2001000002',1,11);
INSERT INTO t VALUES('2001000002',2,31);
INSERT INTO t VALUES('2001000002',3,23);

INSERT INTO t VALUES('2001000003',1,21);
INSERT INTO t VALUES('2001000003',2,22);
INSERT INTO t VALUES('2001000003',3,23);
INSERT INTO t VALUES('2001000003',4,23);
-- 以上为测试数据

SELECT productBar
	,SUM(timeUsed) AS 总时间
	,STUFF((SELECT ','+ LTRIM(b.step) FROM t AS b WHERE a.productBar=b.productBar FOR XML PATH('') ),1,1,'') AS steps
	,CASE WHEN (SELECT count(distinct b.step) FROM t AS b WHERE a.productBar=b.productBar )=4 THEN '已完成' ELSE '未完成' END AS 完成状态
FROM t AS a
GROUP BY productBar
/*
productBar	总时间	steps	  完成状态
2001000001	53	    1,2,3,4	已完成
2001000002	65	    1,2,3	  未完成
2001000003	89	    1,2,3,4	已完成
*/
HZ23 2020-09-18
  • 打赏
  • 举报
回复
希望大家帮助下,自己想不明白。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧