如何在SQL中偏移1条记录?

问题描述 投票:0回答:1

我的 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
sql sql-server select offset
1个回答
0
投票

如果没有唯一的密钥,那么我会有效地尝试制作一个。

使用:

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
© www.soinside.com 2019 - 2024. All rights reserved.