我的 SQL Server 数据库中有此记录,我找不到偏移记录或获得此预期结果的方法:
翻译日期 | 跨时 | 术语 ID | 跨号 | 条形码 | 商品描述 | 价格 | 数量 | 净总计 | trans类型 |
---|---|---|---|---|---|---|---|---|---|
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4809011681439 | BoyBawanhiccorn100g | 25.25 | 1 | 25.25 | 标准销售 |
这是表格的当前内容:
翻译日期 | 跨时 | 术语 ID | 跨号 | 条形码 | 商品描述 | 价格 | 数量 | 净总计 | trans类型 |
---|---|---|---|---|---|---|---|---|---|
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4809011681439 | BoyBawanhiccorn100g | 25.25 | 1 | 25.25 | 标准销售 |
2023-10-03 | 03:27PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | -1 | -52.25 | 物品作废 |
在我当前的表中:需求是获取详细的销售情况,其中不包括 Item Voided,并且没有标识符来识别哪条记录是其中 transType = Item Voided 的记录的链接。这是插入的原始数据,所有者只想获得标准销售,但由于 1 条记录应被无效项目抵消,因此会出现差异。这可以通过 SUM 和 GROUP BY 轻松解决,但问题是所有者想要查看详细的交易行。
我不知道如何实现他想要的。有人可以帮我吗?
我已经尝试过这个,但它不起作用或显示出我想要的预期结果:
WITH SaleCounts AS (
SELECT
*,
CASE
WHEN transType= 'Item Voided' THEN 1
ELSE ROW_NUMBER() OVER (PARTITION BY barcode, itemDescription, quantity ORDER BY (SELECT NULL))
END AS RowNum
FROM
sales_details
)
SELECT transDate, transTime, termId, transNumber, barcode, itemDescription, price, quantity, netTotal, transType
FROM
SaleCounts
WHERE
RowNum > 1
OR transType<> 'Item Voided' and transNumber='2496'
ORDER by transDate, transTime, termId, transNumber;
结果:
翻译日期 | 跨时 | 术语 ID | 跨号 | 条形码 | 商品描述 | 价格 | 数量 | 净总计 | trans类型 |
---|---|---|---|---|---|---|---|---|---|
2023-10-03 | 03:26PM | 1 | 2496 | 4809011681439 | BoyBawanhiccorn100g 25.25 | 1 | 25.25 | 标准销售 | |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
2023-10-03 | 03:26PM | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 1 | 52.25 | 标准销售 |
我也尝试过呈现这个结果,但他不想要这个:
SELECT
transDate, transTime, termId, transNumber, barcode,
itemDescription, price,
SUM(CAST(quantity AS float)) quantity,
SUM(CAST(netTotal AS float)) netTotal, transType
FROM
sales_details
WHERE
transNumber = '2496'
GROUP BY
transDate, transTime, termId, transNumber, barcode,
itemDescription, price, quantity, netTotal, transType;
结果:
翻译日期 | 跨时 | 术语 ID | 跨号 | 条形码 | 商品描述 | 价格 | 数量 | 净总计 | trans类型 |
---|---|---|---|---|---|---|---|---|---|
2023-10-03 | 1 | 2496 | 4801010504207 | JBabyOil芦荟维生素E50m | 52.25 | 2 | 104.5 | ||
2023-10-03 | 1 | 2496 | 4809011681439 | BoyBawanhiccorn100g | 25.25 | 1 | 25.25 |
如果没有唯一的密钥,那么我会有效地尝试制作一个。
使用:
row_number() over(partition by <all columns go here>) as row_num,
然后你可以:
count() over(partition by <all fields EXCEPT transType>) as count1
过滤器:
where count1 = 1