可以在SQL中找到重复项

时间:2017-10-06 09:09:55

标签: sql-server

我已经尝试了post的以下建议,但这不适用于我的情况,或者至少我无法根据自己的需要调整查询。

我有三个表:一个代表文档标题,一个代表文档行,一个代表项目信息(代码,描述等)。

我想提取所有具有相同值的文档编号(这是文档标题表中的信息),相同的项目(项目的代码)和相同的数量(来自文档的行)表)。我该如何提取这些信息?感谢

表格是

DocHeader              DocLines             Items

ID                     fDocID               ID 
Code                   fItemID              Code
Date                   Quantity             Description
----                   --------             -----------
TotalValue             etc                  etc

稍后修改

输出应该像:

DocCode    ItemCode   Quantity   TotalValue
01         001            5        1000
01         002            5        1000
01         003            4        1000 
02         001            5        1000 
02         002            5        1000
02         003            4        1000

DDL

create table DocHeader 
(
    Id bigint not null identity(1,1) primary key clustered
    , Code nvarchar(32) not null
    , [Date] datetime not null
)
go
create table Items 
(
    Id bigint not null identity(1,1) primary key clustered
    , Code nvarchar(32) not null
    , [Description] nvarchar(256)
    , UnitPrice money not null
)
go
create table DocLines
(
    Id bigint not null identity(1,1) primary key clustered
    ,fDocId bigint not null constraint fk_DocLines_fDocId foreign key references DocHeader(Id)
    ,fItemId bigint not null constraint fk_DocLines_fDocId foreign key references Items(Id)
    ,Quantity int not null
)
go
create view vDocHeader as
select dh.*
, x.TotalValue
from DocHeader
left outer join 
(
    select dl.fDocId
    , sum(dl.Quantity * i.UnitPrice) TotalValue
    from DocLines dl
    inner join Items i
    on i.Id = dl.fItemId
    group by dl.fDocId
) x
on x.fDocId = dh.Id

1 个答案:

答案 0 :(得分:0)

为什么不进行简单的分组?

SELECT dh.Code AS DocCode, i.Code AS ItemCode, Quantity, SUM(dl.Quantity * i.UnitPrice) AS TotalValue
FROM DocHeader dh
LEFT JOIN DocLines dl ON dl.fDocId=dh.id
JOIN Items i ON i.Id = dl.fItemId
GROUP BY dh.Code,i.Code,Quantity