SQL实现多条数据重复行只显示一条,非重复的数据全部显示
今天导数据,发现很多都是重复列,只有一两行数据是不重复的,由于才接触SQL不久,就试了下,最终借助ROW_NUMBER()OVER(PARTITION BYORDER BY)实现了,记录哈
在这里插入代码片
SELECT
CASE WHEN CONVERT(INT,Row_num) = 1 THEN OrderName ELSE '' END AS OrderName ,
CASE WHEN Row_num = 1 THEN Seq ELSE '' END AS Seq,
CASE WHEN Row_num = 1 THEN TNR ELSE '' END ,
//不想As了,太累了,但凡重复过多就累了,所以一直想可不可以不写这么多的case when 实现,奈何额不晓得。
CASE WHEN Row_num = 1 THEN Description ELSE '' END,
CASE WHEN Row_num = 1 THEN SO ELSE '' END,
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),POS) ELSE '' END,
//做类型转化呢,是因为这些字段有decimal类型和int类型,1.解决报错;2.int为空时显示0,为了好看自然不要0,我要空
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),Qty) ELSE '' END,
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),QtyDone) ELSE '' END,
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),IsDelete) ELSE '' END,
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),IsClose) ELSE '' END,
CASE WHEN Row_num = 1 THEN CONVERT(NVARCHAR(20),CreateDate,121) ELSE '' END,
lot,Box,lotQ
FROM (
SELECT a.OrderName,b.Seq,b.TNR,e.Description,b.SO,b.POS,b.Qty,b.QtyDone,b.IsDelete,b.IsClose,b.CreateDate,c.lot,c.Box,c.Qty AS LotQ,
CONVERT(INT,ROW_NUMBER()OVER(PARTITION BY a.OrderName,b.Seq,b.TNR,e.Description,b.SO,b.POS,b.Qty,b.QtyDone,b.IsDelete,b.IsClose,b.CreateDate
ORDER BY c.lot,c.Box,c.Qty,b.CreateDate ) )AS Row_num
FROM POrder a
left JOIN OrderItem b ON b.POrderId = a.POrderId
left JOIN OrderItemLot c ON c.OrderItemId = b.OrderItemId
left JOIN lot d ON d.LotSN = c.LotSN
left JOIN product e ON e.ProductId=b.ProductId
LEFT JOIN productRoot f ON f.ProductId=b.ProductId
WHERE OrderName LIKE '89%' AND a.IsClose=0 ) AS Pdata
| | |
第一版查询
|
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***VJ ***0M 10000.0000 1
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***VL ***0M 10000.0000 2
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***VN ***0M 10000.0000 3
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***VR ***0M 10000.0000 4
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***W5 ***0M 10000.0000 5
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***DY ***0M 153.0000 6
**90000*** 000050 ***40000*** ****611 5 259.0000 259.0000 0 1 2022-03-09 07:34:39.407 ***JS ***VV 259.0000 1
**90000*** 000060 ***40007*** ****611 6 101000.0000 101000.0000 0 1 2022-03-09 07:34:39.413 ***JT ***GJ 101000.0000 1
|
第二版查询
**90000*** 000040 ***20003*** ****611 4 50153.0000 50153.0000 0 1 2022-03-09 07:34:39.400 ***VJ ***0M 10000.0000
***VL ***0M 10000.0000
***VN ***0M 10000.0000
***VR ***0M 10000.0000
***W5 ***0M 10000.0000
***DY ***0M 153.0000
**90000*** 000050 ***40000*** ****611 5 259.0000 259.0000 0 1 2022-03-09 07:34:39.407 ***JS ***VV 259.0000
**90000*** 000060 ***40007*** ****611 6 101000.0000 101000.0000 0 1 2022-03-09 07:34:39.413 ***JT ***GJ 101000.0000
| | |
别问为什么带*号,问就是别人的数据,被认出来多尴尬!!!haha