我真的希望你能帮助我。
我有这张桌子: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语句。
答案 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
条记录。