簡體   English   中英

SQL從記錄集中的第一個數字分組

[英]SQL Grouping by first digit from sets of record

我在SQL中需要您的幫助,下面有一組有關“成本中心ID”的記錄。 我想做的是通過插入列來區分類別來對其進行分類/分組。

如您所見,所有以7開頭的數字都屬於粗體數字。 我的預期結果也在下面的圖像上。

圖片

您可以如下所示:

DECLARE @Tbl TABLE (ID INT)
INSERT INTO @Tbl
VALUES
(735121201),
(735120001),
(5442244),
(735141094),
(735141097),
(4008060),
(735117603),
(40100000),
(735142902),
(735151199),
(4010070)

;WITH TableWithRowId
AS
(
    SELECT 
        ROW_NUMBER() OVER (ORDER BY(SELECT NULL)) RowId,
        ID
    FROM 
        @Tbl    
), TempTable
AS
(
    SELECT T.RowId + 1 AS RowId  FROM TableWithRowId T
    WHERE
        LEFT(T.ID, 1) != 7
), ResultTable
AS
(
    SELECT
        T.RowId ,
        T.ID,
        DENSE_RANK() OVER (ORDER BY (SELECT TOP 1 A.RowId FROM TempTable A WHERE A.RowId > T.RowId ORDER BY A.RowId)) AS Flag
    FROM TableWithRowId T
)

SELECT * FROM ResultTable

結果:

RowId       ID          Flag
----------- ----------- ----------
1           735121201   1
2           735120001   1
3           5442244     1
4           735141094   2
5           735141097   2
6           4008060     2
7           735117603   3
8           40100000    3
9           735142902   4
10          735151199   4
11          4010070     4

以下查詢與NEER相似

;WITH test_table(CenterID)AS(
    SELECT '735121201' UNION ALL
    SELECT '735120001' UNION ALL
    SELECT '5442244' UNION ALL
    SELECT '735141094' UNION ALL
    SELECT '735141097' UNION ALL
    SELECT '4008060' UNION ALL
    SELECT '735117603' UNION ALL
    SELECT '40100000' UNION ALL
    SELECT '735142902' UNION ALL
    SELECT '735151199' UNION ALL
    SELECT '4010070'
),t1 AS (
    SELECT *,ROW_NUMBER()OVER(ORDER BY(SELECT 1)) AS rn,CASE WHEN LEFT(t.CenterID,1)='7' THEN 1 ELSE 0 END AS isSeven
    FROM test_table AS t
),t2 AS(
    SELECT t1.*,ROW_NUMBER()OVER(ORDER BY t1.rn) AS toFilter
    FROM t1 LEFT JOIN t1 AS pt ON pt.rn=t1.rn-1 
    WHERE pt.CenterID IS NULL OR (t1.isSeven=1 AND pt.isSeven=0)
)
SELECT t1.CenterID,x.toFilter FROM t1
CROSS APPLY(SELECT TOP 1 t2.toFilter FROM t2 WHERE t2.rn<=t1.rn ORDER BY rn desc) x
CenterID  toFilter
--------- --------------------
735121201 1
735120001 1
5442244   1
735141094 2
735141097 2
4008060   2
735117603 3
40100000  3
735142902 4
735151199 4
4010070   4

暫無
暫無

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

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