[英]I need a Row_number over partition to achieve this in SQL Server
[英]SQL Server function ROW_NUMBER() OVER (PARTITION BY not calc
我對ROW_NUMBER() OVER(PARTITION BY ....)
函數有問題。
這是我使用的原始表格:
PRODUCT VERSION Colour
------------------------------
Apple 7.1 Black
Apple 7.1 Blue
Apple 7.1 Red
Apple 2.0 NULL
Beer 12.8 Blue
Beer 12.8 NULL
Beer 12.8 NULL
Bread 14.87 Blue
Bread 14.87 NULL
Bread 14.87 Orange
Notes 100 Red
Notes 100 NULL
Car NULL Green
Car NULL Blue
Car NULL Red
Car NULL Red
我針對此表運行此腳本:
SELECT
[product], [version], [colour],
ROW_NUMBER() OVER (PARTITION BY [product], [Version] ORDER BY [product] DESC) AS COUNT2
FROM
TABLE1
然后我得到這樣的輸出:
PRODUCT VERSION Colour COUNT2
-----------------------------------
Apple 7.1 Black 1
Apple 7.1 Blue 2
Apple 7.1 Red 3
Apple 2.0 NULL 4
Beer 12.8 Blue 1
Beer 12.8 NULL 2
Beer 12.8 NULL 3
Bread 14.87 Blue 1
Bread 14.87 NULL 2
Bread 14.87 Orange 3
Notes 100 Red 1
Notes 100 NULL 2
Car NULL Green 1
Car NULL Blue 2
Car NULL Red 3
Car NULL Red 4
然后我選擇具有最大值的行
SELECT
[Product], [Version], MAX(COUNT2)
FROM
[dbo].[TABLE1]
GROUP BY
Product, Version
但是我有問題。 運行函數ROW_NUMBER() OVER(PARTITION BY ...)
時我無法獲得相同的數字,僅取決於1列
如果我計算回來的方法,我將無法計算回來並獲得正確的結果。
PRODUCT VERSION COUNT2
----------------------------
Apple 7.1 6
Apple 2.0 7
Beer 12.8 5
Bread 14.87 1
Notes 100 6
Car NULL 8
如果我最后運行沒有版本的腳本,那么在進行反向計算時會得到不同的數字
SELECT
[product], [version], [colour],
ROW_NUMBER() OVER(PARTITION BY [product], ORDER BY [product] DESC) AS COUNT2
FROM
TABLE1
SELECT
[Product], MAX(COUNT2)
FROM
[dbo].[TABLE1]
GROUP BY
Product
結果與我預期的不同:
PRODUCT COUNT
----------------
Apple 4
Beer 3
Bread 3
Notes 2
Car 4
我期望這樣的結果:
PRODUCT VERSION COUNT2
----------------------------
Apple 7.1 3
Apple 2.0 1
Beer 12.8 3
Bread 14.87 3
Notes 100 2
Car NULL 4
感謝您的幫助,我設置了函數ROW_NUMBER() OVER(PARTITION BY....)
原始表有10000多行。
只需添加count()以及查詢分區
Select PRODUCT,[VERSION], COUNT2 from (
Select DISTINCT
PRODUCT,
VERSION,
Count(COUNT2)OVER(PARTITION BY version )COUNT2 from (
SELECT
[product],
[version],
[colour],
ROW_NUMBER() OVER (PARTITION BY [product], [Version] ORDER BY [product] DESC) AS COUNT2
FROM
@Table1 )T
GROup BY PRODUCT, VERSION,COUNT2 )TT
ORDER BY CASE WHEN VERSION IS NOT NULL then 0 else 1 END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.