我有这个问题:
SELECT DISTINCT
CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar) AS ID,
CONCAT([SIF_DRZAVE].NAZIV_DRZAVE,' - ',CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar),' - Zona I') AS NAZIV
FROM
[dbo].[SV_USLUGA_DRZAVA]
FULL OUTER JOIN
[SIF_DRZAVE] ON ([SV_USLUGA_DRZAVA].[ID_DRZAVE]=[SIF_DRZAVE].[ID_DRZAVE])
WHERE
[SV_USLUGA_DRZAVA].SIF_VRSTA_USLUGA = 139
AND ([SV_USLUGA_DRZAVA].ID_DRZAVE = 295
OR [SV_USLUGA_DRZAVA].ID_DRZAVE = 293)
UNION ALL
SELECT DISTINCT
CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar) AS ID,
CONCAT([SIF_DRZAVE].NAZIV_DRZAVE,' - ',CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar),' - Zona II') AS NAZIV
FROM
[dbo].[SV_USLUGA_DRZAVA]
FULL OUTER JOIN
[SIF_DRZAVE] ON ([SV_USLUGA_DRZAVA].[ID_DRZAVE]=[SIF_DRZAVE].[ID_DRZAVE])
WHERE
[SV_USLUGA_DRZAVA].SIF_VRSTA_USLUGA = 139
AND NOT ([SV_USLUGA_DRZAVA].ID_DRZAVE = 295
OR [SV_USLUGA_DRZAVA].ID_DRZAVE = 293)
ORDER BY
NAZIV
此查询按'NAZIV'整个声明后的顺序排序。
但我希望在UNION ALL
之前通过'NAZIV'进行查询答案 0 :(得分:1)
您的查询有很多问题。我想这就是你想要的:
SELECT distinct Cast(ud.[ID_DRZAVE] as varchar(255)) as ID,
CONCAT(d.NAZIV_DRZAVE, ' - ',
Cast(ud.[ID_DRZAVE] as varchar(255)),
(CASE WHEN ud.ID_DRZAVE IN (295, 293) THEN ' - Zona I' ELSE ' - Zona II' END)
) as NAZIV
FROM [dbo].[SV_USLUGA_DRZAVA] ud JOIN
[SIF_DRZAVE] d
ON ud.[ID_DRZAVE] = d.[ID_DRZAVE]
WHERE d.SIF_VRSTA_USLUGA = 139
ORDER BY (CASE WHEN ud.ID_DRZAVE IN (295, 293) THEN 1 ELSE 0 END),
NAZIV;
注意:
FULL JOIN
条款正在取消WHERE
。使用适当的JOIN
。IN
而不是链接OR
条件。VARCHAR()
没有长度。默认长度因上下文而异,调试此问题可能非常具有挑战性。UNION
/ UNION ALL
。答案 1 :(得分:0)
添加另一列,以便获得所需的订单:
SELECT DISTINCT
'1' AS ZONA,
CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar) AS ID,
CONCAT([SIF_DRZAVE].NAZIV_DRZAVE,' - ',CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar),' - Zona I') AS NAZIV
FROM
[dbo].[SV_USLUGA_DRZAVA]
FULL OUTER JOIN
[SIF_DRZAVE] ON ([SV_USLUGA_DRZAVA].[ID_DRZAVE]=[SIF_DRZAVE].[ID_DRZAVE])
WHERE
[SV_USLUGA_DRZAVA].SIF_VRSTA_USLUGA = 139
AND ([SV_USLUGA_DRZAVA].ID_DRZAVE = 295
OR [SV_USLUGA_DRZAVA].ID_DRZAVE = 293)
UNION ALL
SELECT DISTINCT
'2',
CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar) AS ID,
CONCAT([SIF_DRZAVE].NAZIV_DRZAVE,' - ',CAST([SV_USLUGA_DRZAVA].[ID_DRZAVE] AS varchar),' - Zona II') AS NAZIV
FROM
[dbo].[SV_USLUGA_DRZAVA]
FULL OUTER JOIN
[SIF_DRZAVE] ON ([SV_USLUGA_DRZAVA].[ID_DRZAVE]=[SIF_DRZAVE].[ID_DRZAVE])
WHERE
[SV_USLUGA_DRZAVA].SIF_VRSTA_USLUGA = 139
AND NOT ([SV_USLUGA_DRZAVA].ID_DRZAVE = 295
OR [SV_USLUGA_DRZAVA].ID_DRZAVE = 293)
ORDER BY
ZONA, NAZIV