如果DAN上没有记录则使用ENU

时间:2016-08-23 11:25:15

标签: sql-server

我真的希望你能帮助我。

我有这张桌子:Text

Text   | LANGUAGECODE | PRODUCT
BlaENU | ENU          | PROD1
BlaDAN | DAN          | PROD1
BlaENU | ENU          | PROD2

我需要一个SQL行,我检查语言代码DAN是否存在,然后使用DAN,否则使用ENU。我怎么能这样做?

现在我有行SQL,但我同时收到DAN和ENU文本。

SELECT * 
FROM Text 
WHERE PRODUCT = 'PROD1' AND (LANGUAGECODE = 'DAN' OR LANGUAGECODE = 'ENU') 

任何人都可以帮我解决我的SQL语句。

1 个答案:

答案 0 :(得分:3)

您可以使用ROW_NUMBER

SELECT Text, LANGUAGECODE, PRODUCT
FROM (
  SELECT Text, LANGUAGECODE, PRODUCT,
         ROW_NUMBER() OVER (PARTITION BY PRODUCT 
                            ORDER BY CASE 
                                        WHEN LANGUAGECODE='DAN' THEN 1
                                        ELSE 2
                                     END) AS rn
  FROM Text
  WHERE LANGUAGECODE IN ('DAN', 'ENU')) AS t
WHERE t.rn = 1

PARTITION BY子句为每个唯一产品创建一个行号切片。 ORDER BY子句将DAN代码优先于ENU。外部查询选择存在的DAN行,否则选择ENU条记录。