SQL查询协助(聚合)
我需要创建销售报告,并且有sql查询:SQL查询协助(聚合),sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我需要创建销售报告,并且有sql查询: SELECT --top 1 t.branch_no as TBranchNo, t.workstation_no as TWorkstation, t.tender_ref_no as TSaleRefNo, t.tender_line_no as TLineNo,
SELECT --top 1
t.branch_no as TBranchNo,
t.workstation_no as TWorkstation,
t.tender_ref_no as TSaleRefNo,
t.tender_line_no as TLineNo,
t.tender_code as TCode,
T.contribution as TContribution,
l.sale_line_no as SaleLineNo
FROM TENDER_LINES t
LEFT JOIN SALES_TX_LINES l
on t.branch_no = l.branch_no and t.workstation_no = l.workstation_no and t.tender_ref_no = l.sale_tx_no
where l.sale_tx_no = 2000293 OR l.sale_tx_no = 1005246 --OR sale_tx_no = 1005261
order by t.tender_ref_no asc,
l.sale_line_no desc
查询结果如下所示:
我努力实现的结果是:
对于事务2只有一行SaleLineNo 1或2,而对于事务1仍然有=ing两行,因为TCode不同
谢谢
我正在使用SSQL2012。不太确定您拥有哪些数据,但您可能想试试
GROUP BY TlineNo, TCode ...
但您必须注意不要按会导致重复贡献值的内容分组。您可以使用该函数将行分组,并从一开始对每个组中的行进行编号。如果您选择了正确的列来定义分区,并且只保留“row_number=1”的行,那么您已经解决了问题的第一部分,即放弃不必出现在报告中的行(请参阅链接文档中的示例,它们非常清楚)
一旦你解决了这个问题,你只需要重复你正在做的事情,但是要根据这个数据的结果,而不是原始数据。你可以使用视图或子选择来实现你的结果,即
鉴于:
CREATE VIEW FilteredData AS -- here the rank function query, then selct from the view
SELECT --here your current query --
FROM FilteredData
与
带子选择
SELECT -- your current query
FROM (SELECT FROM -- here the rank function query -- )
感谢您对我的查询提供的帮助。经过反复研究,我找到了一个完全符合我要求的解决方案。它如下所示:我在几个字段上按照@Yogesh86的提示进行了分组
SELECT
MAX(t.branch_no) as TBranchNo,
Max(t.workstation_no) as TWorkstation,
t.tender_ref_no as TSaleRefNo,
Max(t.tender_line_no) as TLineNo,
t.tender_code as TCode,
MAx(T.contribution) as TContribution,
MAX(l.sale_line_no) as SaleLineNo
FROM TENDER_LINES t
LEFT JOIN SALES_TX_LINES l
on t.branch_no = l.branch_no and t.workstation_no = l.workstation_no and t.tender_ref_no = l.sale_tx_no
where l.sale_tx_no = 2000293 OR l.sale_tx_no = 1005246 --OR sale_tx_no = 1005261
GROUP BY
t.tender_ref_no,
t.tender_line_no,
t.tender_code
如果我知道否决投票的原因,我将不胜感激。这让我有机会不再犯那样的错误。根据你的数据,似乎在WHERE子句上添加一个简单的SaleLineNo=1就可以了;-)是的,你必须,但必须是一组,但必须结合have子句meniton或have condition:)我不必使用Having子句。感谢@JotaBe的帮助。我想出了另一种方法来获得结果。
SELECT
MAX(t.branch_no) as TBranchNo,
Max(t.workstation_no) as TWorkstation,
t.tender_ref_no as TSaleRefNo,
Max(t.tender_line_no) as TLineNo,
t.tender_code as TCode,
MAx(T.contribution) as TContribution,
MAX(l.sale_line_no) as SaleLineNo
FROM TENDER_LINES t
LEFT JOIN SALES_TX_LINES l
on t.branch_no = l.branch_no and t.workstation_no = l.workstation_no and t.tender_ref_no = l.sale_tx_no
where l.sale_tx_no = 2000293 OR l.sale_tx_no = 1005246 --OR sale_tx_no = 1005261
GROUP BY
t.tender_ref_no,
t.tender_line_no,
t.tender_code