簡體   English   中英

比較SQL Server中同一列中的數據

[英]Comparing data from the same column in SQL Server

我有一個表,其中有一個包含如下數據的列:

aaaa;1
aaaa;2
aaaa;3
bbbb;1
cccc;1
dddd;1
dddd;2

我需要在分號( ; )之后選擇編號最高的數據,如下所示:

aaaa;3
bbbb;1
cccc;1
dddd;2

誰能給我關於如何執行此操作的想法?

就這么簡單:

select 
    -- Construct the string by left part + max(right part)
    LEFT([column], CHARINDEX(';', [column], 0) - 1) + ';' + 
    MAX(RIGHT([column], LEN([column]) - CHARINDEX(';', [column], 0)))
from 
    [table]
group by 
    LEFT([column], CHARINDEX(';', [column], 0) - 1) -- The left part of ';'

使用CharIndex查找分號的位置,然后使用結果進行排序。 下面的示例代碼:

declare @table table (
col1 varchar(25)
)

insert into @table (col1) values ('aaaa;1')
insert into @table (col1) values ('aaaa;2')
insert into @table (col1) values ('aaaa;3')
insert into @table (col1) values ('bbbb;1')
insert into @table (col1) values ('dddd;1')
insert into @table (col1) values ('dddd;2')

select top 1
col1,
charindex(';',col1,0) as SemiColonLocation,
substring(col1, 0, charindex(';',col1,0) + 1) as TextVal,
substring(col1, charindex(';',col1,0) + 1, (len(col1) - charindex(';',col1,0))) as AfterVal
from @table
order by substring(col1, charindex(';',col1,0) + 1, (len(col1) - charindex(';',col1,0))) desc

您可以使用LEFTSUBSTRINGCHARINDEX函數來實現此目的。 閱讀本文以獲取更多信息。

SQL小提琴

WITH CteSplit(string, leftString, rightString, RN) AS(
    SELECT 
        string,
        LEFT(string, CHARINDEX(';', string, 0) - 1),
        CAST(SUBSTRING(string, CHARINDEX(';', string, 0) + 1, LEN(string) - CHARINDEX(';', string, 0)) AS INT),
        RN = ROW_NUMBER() OVER(
                PARTITION BY 
                    LEFT(string, CHARINDEX(';', string, 0) - 1)
                ORDER BY
                    CAST(SUBSTRING(string, CHARINDEX(';', string, 0) + 1, LEN(string) - CHARINDEX(';', string, 0)) AS INT) DESC
            )
    FROM TestTable
)
SELECT
    string
FROM CteSplit
WHERE RN = 1

您可以像這樣使用rank();


    select column_name
      from (select a.*,
                   rank() over(partition by substr(column_name, 1, 4) order by substr(column, 6) desc) as row_num
              from table_name a)
     where row_num = '1';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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