我在创建视图时遇到问题。说:表达式必须是相同的数据类型。这发生在名称。
CREATE VIEW V_DETAILS_BY_CATEGORY AS
SELECT category_id, name
FROM category
UNION ALL
SELECT DISTINCT(category_id), COUNT(film_id)
FROM film_category
GROUP BY category_id;
编辑:
我的确切问题是我想使用category_id加入两个选择Statment中的结果。
答案 0 :(得分:3)
count(film_id)是一个数字,而name(可能)是某种字符串。您可能想要进行JOIN,而不是union(union从两个不同的表中获取具有相同结构的行)。此外,不需要使用distinct,因为您正在执行分组。
你可能想要像
这样的东西SELECT category_id, category_name, COUNT(film_id)
FROM film_category JOIN category USING category_id
GROUP BY category_id, category_name;
答案 1 :(得分:2)
联盟必须包含相同类型的数据。
如果您将计数转换为任何数据类型" name"领域是,它可能会奏效。
SELECT category_id, name FROM category
UNION ALL
SELECT category_id, TO_CHAR(COUNT(film_id)) FROM film_category
GROUP BY category_id;
但是,我同意okaram,你实际上可能正在寻找一个JOIN,而不是UNION ALL,这就是我询问目的的原因。
答案 2 :(得分:0)
为联盟中的列使用相同类型的数据
CREATE VIEW V_DETAILS_BY_CATEGORY AS
SELECT category_id, name
FROM category
UNION ALL
SELECT category_id, CAST(COUNT(film_id) AS NVARCHAR(100))
FROM film_category
GROUP BY category_id;
-------------- OR
SELECT category_id, name
FROM category
UNION ALL
SELECT category_id, LTRIM(RTRIM(STR(COUNT(film_id))))
FROM film_category
GROUP BY category_id;