我目前正在使用Sql server 2016
我有那个例子:
ID / TYPE / VALUE
001 / 10 / EAN13
001 / 10 / EAN8
002 / 10 / EAN128
002 / 10 / EAN13
003 / 10 / EAN8
004 / 10 / EAN13
我想要这个:
ID / TYPE / VALUE
001 / 10 / EAN13
002 / 10 / EAN13
003 / 10 / EAN8
004 / 10 / EAN13
我目前的要求是:
SELECT ID.a,TYPE.a,VALUE.a FROM TABLE.a , TABLE.b
WHERE ID.a = ID.b and TYPE.a = TYPE.b AND VALUE = 'EAN13' or VALUE LIKE 'EAN%'
我看到一个选项,只为每个ID选择我想要的行: 使用订单并且仅显示带有ROW.NUMBER的第一行,但它似乎也不起作用。 请问你能帮帮我吗 ? :)
答案 0 :(得分:0)
从不在FROM
子句中使用逗号。 始终使用正确的,明确的JOIN
语法。如果你这样做,你的问题可能会消失。您还需要修复限定列名称:
SELECT a.ID, a.TYPE, a.VALUE
FROM TABLE.a a JOIN
TABLE.b b
ON a.ID = b.ID AND a.TYPE = TYPE
WHERE VALUE = 'EAN13' or VALUE LIKE 'EAN%';
当然,这两个LIKE
表达式是多余的,因此您可以删除第一个:
SELECT a.ID, a.TYPE, a.VALUE
FROM TABLE.a a JOIN
TABLE.b b
ON a.ID = b.ID AND a.TYPE = TYPE
WHERE a.VALUE LIKE 'EAN%';
答案 1 :(得分:0)
试试这个:
; with
cte as (
SELECT t.*
, ROW_NUMBER() over (partition by t.id order by SUBSTRING(t.value, 5, 1) desc) as RN
FROM table t
)
select cte.id
, cte.type
, cte.value
from cte
where RN = 1