生命不止-热爱不息之浅谈SQL(1)

很久没有写博客了,有多久,大概一两周吧,并不是自己懈怠了或者是没有在学习的状态。而是!项目虐我千百遍,我待项目如初恋。真的是有心无力的感觉,今天也是很疲惫的一天,坐地铁的时间显的格外漫长,看着地铁中男男女女瘫软在座位上,空气似乎格外沉重。然后自己闲来无事刷到QQ群,在里面看到一个类似面试题的SQL题,自己哗啦哗啦感觉,挺有意思的,因为之前面试刚好有一个问题就是高阶SQL函数语法之UNION和UNION ALL的区别,这个自己也是丝毫不慌,就说出了两个的区别 UNION语法用于表或者数据集的连接,但是数据集是去重的 通俗讲就是合并连接的数据集是不重复的,而UNION ALL 则刚好相反,有重复数据 那么一个去重一个不去重 从执行效率上来说的话 UNION ALL优于UNION。完事儿当时补充一句平时用的比较少,这不今天就用到了 虽然没有特别实际的业务意义。

OK,废话不多说 看题

请问怎样用最少的SQL语句,把下图红色框中的表的数据,拆分为下图蓝色框中的表的数据?
下图蓝色框中表的【销售数量】字段的值,必须为1(下图绿色框)

闲来无事 顺手写下 

命名不太规范哈 别介意

create table SALESTab(
	shopnum varchar(255),
	goodsnum varchar(255),
	salesnum int
)
insert into SALESTab values('SHOP1','BARCODE1',2);
insert into SALESTab values('SHOP2','BARCODE2',3);

drop table SALESTab

SELECT * FROM SALESTab

with t as(
select 'SHOP1' SHUPNUM ,'BARCODE1' GOODSNUM,1 SALESNUM FROM DUAL
UNION ALL
select 'SHOP1' SHUPNUM ,'BARCODE1' GOODSNUM,1 SALESNUM FROM DUAL
UNION ALL
select 'SHOP2' SHUPNUM ,'BARCODE2' GOODSNUM,1 SALESNUM FROM DUAL
UNION ALL
select 'SHOP2' SHUPNUM ,'BARCODE2' GOODSNUM,1 SALESNUM FROM DUAL
UNION ALL
select 'SHOP2' SHUPNUM ,'BARCODE2' GOODSNUM,1 SALESNUM FROM DUAL
)select SHUPNUM,GOODSNUM,sum(SALESNUM) from t group by SHUPNUM,GOODSNUM

 

那么括号内的SQL是正解 之所以嵌套了一个with as的语法就是反向验证下数据结果集 仅此而已 

但是即使这样做 似乎不太行 所以发个帖子 问问小伙伴们 如何用最少的代码求出绿色框中的结果集

最后的最后 想送给自己一句话 与君共勉  前路漫漫道阻且长 少年应披荆斩棘   行之将至。


版权声明:本文为nanyangnongye原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。