Проблема MSSQL с предложением Where-In Multi - PullRequest
0 голосов
/ 08 мая 2018

Я использую две разные базы данных POSTGRE-SQL и MSSQL с API-интерфейсом java-hibernate. Sql перевод критериев, как:

Select * From table t WHERE (t.a, t.b) IN (SELECT max(this_.a) AS y0_, this_.b AS y1_ FROM table this_ GROUP BY this_.id ) Этот запрос с несколькими столбцами работает нормально в базе данных PostGre, но не работает с MSSQL. Может ли кто-нибудь предложить мне обходной путь SQL для сравнения нескольких столбцов с агрегированной функцией?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

если есть varchar

SELECT * 
FROM table t 
WHERE (t.a + '-' + t.b) 
IN (SELECT (max(this_.a) + '-' + this_.b)
    FROM  table this_ )

если int

SELECT * 
FROM table t 
WHERE (CONVERT(nvarcahr(32), t.a) + '-' + CONVERT(nvarcahr(32), t.b)) 
IN (SELECT (CONVERT(nvarcahr(32), max(this_.a)) + '-' + CONVERT(nvarcahr(32),this_.b))
    FROM  table this_ )
0 голосов
/ 08 мая 2018

Использовать объединение:

Select * 
From table t 
inner join (
    SELECT    max(this_.a) AS y0_
            , this_.b  AS y1_ 
    FROM  table this_ 
    Group by this_.b) a on t.a = a.y0_ and t.b = y1_
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...