簡體   English   中英

根據行號或CASE選擇提取值

[英]Extract a value based on a Row Number or CASE select

下面的代碼在我的右邊行,但是我只想返回一個值,而不必在上面加上更多(任何)CASE。 我可以重新檢查該行中兩個值中的哪個值最低,但是我要查找的實際值在“真實世界”中不是按字母順序排列的,因此可以為其分配值。

如果我找回最低的字段文本或CASE號(即20),那將是理想的選擇。 我只是不確定下一步要去哪里,而無需重新檢查兩個字段。

碼:

DECLARE @ID INT  = '1234';

WITH GetMyInfo AS 
(
SELECT field1, field2 , ID
              , ROW_NUMBER() OVER (PARTITION BY ID,NAME ORDER BY CASE
              WHEN ISNULL(field1, field2) = 'z' THEN 20
              WHEN ISNULL(field1, field2) = 'b' THEN 10
              WHEN ISNULL(field1, field2) = 't' or  ISNULL(field1, field2) = 'f' THEN 0   
ELSE 20
END) [RowNumber]
FROM TABLE
WHERE 
             (field1 IS NOT NULL OR field2 IS NOT NULL)
              AND ID= @ID 
)
SELECT    field, field2
FROM GetMyInfo 
WHERE RowNumber = 1

我想要類似Return RowNumberValue的東西

嗯。 我認為您可以:

WITH GetMyInfo AS (
      SELECT t.*, field,
             ROW_NUMBER() OVER (PARTITION BY ID, NAME
                                ORDER BY (CASE WHEN field = 'z' THEN 20
                                               WHEN field = 'b' THEN 10
                                               WHEN field in ('t', 'b') THEN 0 
                                               WHEN field is null THEN 100
                                               ELSE 20
                                           END)) [RowNumber]
       FROM TABLE t CROSS APPLY
            (VALUES (field1), (field2)) as v(field)
       WHERE (field1 IS NOT NULL OR field2 IS NOT NULL) AND ID= @ID 
      )
SELECT  field
FROM GetMyInfo 
WHERE RowNumber = 1;

這將取消數據透視,因此您只能返回匹配的值。

如果可以的話,您可以使用一個額外的查詢來實現所需的內容

DECLARE @ID INT  = '1234';

WITH GetMyInfo AS 
(
SELECT field1,field2,caseNumber,ROW_NUMBER() OVER (PARTITION BY ID,NAME 
ORDER BY [caseNumber] )[RowNumber]
FROM
(SELECT field1, field2 , ID,NAME
          ,  CASE
          WHEN ISNULL(field1, field2) = 'z' THEN 20
          WHEN ISNULL(field1, field2) = 'b' THEN 10
          WHEN ISNULL(field1, field2) = 't' or  ISNULL(field1, field2) = 'f' 
THEN 0   
ELSE 20
END) [caseNumber]
FROM TABLE
)A
WHERE 
             (field1 IS NOT NULL OR field2 IS NOT NULL)
              AND ID= @ID 
)
SELECT    field, field2,caseNumber
FROM GetMyInfo 
WHERE RowNumber = 1

暫無
暫無

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

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