ru_efim
Дата: 14.09.2006 08:19:04
Здравствуйте. Предположим мне хотелось бы выполнить подобный запрос.
1. SELECT COALESCE(r.Cex_Id,v.Cex_Id) AS Cex_Id,
COALESCE(r.Goriz,v.Goriz) AS Goriz,
Cast(COALESCE(r.Num,v.Num) as VarChar(3)) AS Num,
-- какие то еще поля
FROM (SELECT * FROM и т. д.) AS r
FULL JOIN
(SELECT ... FROM и т. д.) AS v
ON r.Cex_Id=v.Cex_Id AND r.Goriz=v.Goriz AND r.Num=v.Num
GROUP BY COALESCE(r.Cex_Id,v.Cex_Id), COALESCE(r.Goriz,v.Goriz), COALESCE(r.Num,v.Num) WITH ROLLUP
ORDER BY COALESCE(r.Cex_Id,v.Cex_Id), COALESCE(r.Goriz,v.Goriz), COALESCE(r.Num,v.Num)
Но при выполнениии возникают ошибки
Column 'r.Num' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Column 'v.Num' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
В тоже время запрос подобный следующему
2. SELECT COALESCE(r.Cex_Id,v.Cex_Id) AS Cex_Id,
COALESCE(r.Goriz,v.Goriz) AS Goriz,
COALESCE(r.Num,v.Num) AS Num,
-- какие то еще поля
FROM (SELECT * FROM и т. д.) AS r
FULL JOIN
(SELECT ... FROM и т. д.) AS v
ON r.Cex_Id=v.Cex_Id AND r.Goriz=v.Goriz AND r.Num=v.Num
GROUP BY COALESCE(r.Cex_Id,v.Cex_Id), COALESCE(r.Goriz,v.Goriz), COALESCE(r.Num,v.Num) WITH ROLLUP
ORDER BY COALESCE(r.Cex_Id,v.Cex_Id), COALESCE(r.Goriz,v.Goriz), COALESCE(r.Num,v.Num)
выполняется без проблем. Почему вознмкают проблеммы при вложении одной функции в другую:
(1.Cast(COALESCE(r.Num,v.Num) as VarChar(3)) и 2.COALESCE(r.Num,v.Num)), причем нет разници Cast() это, или например,
GROUPING(). Это какое-то ограничение? Как провильно добится желаемого?