簡體   English   中英

SQL Server函數ROW_NUMBER()OVER(PARTITION BY不計算

[英]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多行。

試試這個:

SELECT 
    [product], [version], COUNT(*)  
FROM 
    TABLE1
GROUP BY [product], [version]

告訴我它是否能滿足您的需求

PS:您肯定有復制/粘貼問題:此代碼可以正常工作: 在此處輸入圖片說明

只需添加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM