我需要创建一个Sales报告,并且我有一个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,
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只有1行SaleLineNo 1或2,而事务1的两行仍然是=因为TCode不同。
由于
我正在使用SSQL2012。
答案 0 :(得分:0)
不完全确定您拥有哪些数据,但您可能想尝试
GROUP BY TlineNo, TCode ...
但是你必须注意不要被导致重复贡献值的东西分组。
答案 1 :(得分:0)
您可以使用允许对组中的行进行分区的ROW_NUMBER函数,并将每个组内的行编号从1开始。如果您选择正确的列来定义分区,并且仅保留“row_number = 1”的行,则您已解决了问题的第一部分,即丢弃了不必出现在报告中的行。(请参阅样本是链接的文档,它们很清楚。)
一旦解决了这个问题,你只需要重复你正在做的事情,但是根据这些数据的结果,而不是原始数据。您可以使用视图a CTE或子选择来实现结果,即
有了观点:
CREATE VIEW FilteredData AS -- here the rank function query, then selct from the view
SELECT --here your current query --
FROM FilteredData
WITH -- here the rank function query
SELECT -- your current querym, from the CTE
使用subselect
SELECT -- your current query
FROM (SELECT FROM -- here the rank function query -- )
答案 2 :(得分:0)
感谢您对我的查询的帮助。玩完之后,我找到了一个可以随心所欲地工作的解决方案。它如下:我在@ 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