我有父母和儿童表...... 主表:SalesInvoice
ID ToatlQty Unit
1 100 BOX
2 110 BOX
详细信息表:SalesInvoiceDetail
DetailsID ID ItemMasterID Qty Unit
01 1 000000001010 25 BOX
02 1 000000001010 25 BOX
03 1 000000001013 30 BOX
04 2 000000001014 50 BOX
我想输出
ID ItemMasterID Unit TotalQty Qty
1 000000001010 BOX 100 50
1 000000001013 BOX 0 30
2 000000001014 BOX 110 50
对于ID'1',我有两次TotalQty'100',但如果重复,我想要设置为0。
答案 0 :(得分:1)
下面的查询是基于以下假设构建的:如果重复值具有更高的ItemMasterID,则需要TotalQty 0,ID和ItemMasterID的总和数量(基于输出)。如果他们错了,请告诉我。查询包含示例数据,可以按原样运行:
-- sample data
;with SalesInvoice as (
select * from (values
(1, 100, 'BOX'),
(2, 110, 'BOX')
) t(ID, TotalQty, Unit)
),
SalesInvoiceDetail as (
select * from (values
(1, 1, '000000001010', 25, 'BOX'),
(2, 1, '000000001010', 25, 'BOX'),
(3, 1, '000000001013', 30, 'BOX'),
(4, 2, '000000001014', 50, 'BOX')
) t (DetailsID, ID, ItemMasterID, Qty, Unit)
)
-- solution
select
t.ID,
t.ItemMasterID,
SalesInvoice.Unit,
TotalQty =
case when ROW_NUMBER() over(partition by t.id order by ItemMasterID) = 1
then TotalQty else 0 end,
t.Qty
from (
select id, ItemMasterID, Qty = sum(qty) from SalesInvoiceDetail
group by id, ItemMasterID
) t
join SalesInvoice on t.id = SalesInvoice.ID
答案 1 :(得分:0)
SELECT A.Id ,
A.ItemMasterID ,
A.Unit ,
ISNULL(B.ToatlQty, 0) AS ToatlQty ,
A.Qty
FROM ( SELECT Id ,
ItemMasterID ,
Unit ,
SUM(Qty) AS Qty
FROM SalesInvoiceDetail A
GROUP BY Id ,
ItemMasterID ,
Unit
) A
LEFT JOIN SalesInvoice B ON A.ID = B.ID