如何解决使用别名查询作为表格
我正在尝试从查询中获取互斥最大值。
我的第一个查询(原始数据)是这样的:
Material¦Fornecedor
X B
X B
X B
X C
X C
Y B
Y D
Y D
首先,我需要为上表创建最大值查询。为此,我需要按顺序计算“物料”和“高级”的相同值。我的意思是,我需要计数,直到SQL找到显示不同材质和前叉的行。 之后,我将得到如下所示的结果(max_line是它找到具有相同材质和前叉的线的次数):
max_line¦Material¦Fornecedor
3 X B
2 X C
1 Y B
2 Y D
最后,我需要获得排他材料的最高行。基于上表,我需要构造的查询结果应该是这样的:
max_line¦Material¦Fornecedor
3 X B
2 Y D
到目前为止,我的代码如下所示:
select * from
(SELECT max(w2.line) as max_line,w2.Material,w2.[fornecedor] FROM
(SELECT w.Material,ROW_NUMBER() OVER(PARTITION BY w.Material,w.[fornecedor]
ORDER BY w.[fornecedor] DESC) as line,w.[fornecedor]
FROM [Database].[dbo].['Table1'] w) as w2
group by w2.Material,w2.[fornecedor]) as w1
inner join (SELECT w1.Material,MAX(w1.max_line) AS maximo FROM w1 GROUP BY w1.material) as w3
ON w1.Material = w3.Material AND w1.row = w3.maximo
由于无法对查询进行别名并不能在内部联接上使用它,因此我无法使用内部联接。
你能帮我吗?
谢谢
解决方法
使用窗口函数查找最大行号,然后按它进行过滤。
SELECT MAXROW,w1.Material,w1.[fornecedor]
FROM (
SELECT w2.Material,w2.[fornecedor],max([ROW]) over (partition by Material) MAXROW
FROM (
SELECT w.Material,w.[fornecedor],ROW_NUMBER() OVER (PARTITION BY w.Material,w.[fornecedor] ORDER BY w.[fornecedor] DESC) as [ROW]
FROM [Database].[dbo].['Table1'] w
) AS w2
) AS w1
WHERE w1.[ROW] = w1.MAXROW;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。