我有两张桌子
通过此查询,我得到了结果
select countries.id, countries.name, Towns.id,Towns.TownName
from
Countries
left outer join Towns on countries.id = towns.countryID
现在,我希望按国家/地区对结果进行分组,以便在CrystalReport
上获得此类内容。甚至有可能成功吗?
答案 0 :(得分:2)
在您提供的示例中,在Sql Server中执行GROUP BY
是不可取的。 Sql GROUP BY
通常用于从每个组的列表中投射单个标量值,例如。
SELECT Countries.Name, Count(Towns.Id) AS NumberOfTowns, Sum(Towns.Population) AS TotalPop
FROM Countries
LEFT OUTER JOIN Towns
ON Countries.Id = Towns.CountryID
GROUP BY Countries.Name;
会得到像
这样的结果Name NumberOfTowns TotalPop
Bosnia 2 123456
England 2 98765
将汇总COUNT
和SUM
应用于每个国家/地区的所有行(城镇)。
这对您的报告没有用,因为您需要显示每个国家/地区的所有城镇的列表。
您想要的是按原样使用当前查询,然后在Countries.Name
上应用Crystal Group标头。然后,在Crystal中,从“详细信息”部分中删除Countries.Name
字段(因为您不希望重复该国家/地区)。您可能还希望在组和数据中完成一些排序 - 再次,我建议您在Crystal中执行此操作(尽管ORDER BY Countries.Name, Towns.TownName
也可以。)
然后,您将有一份类似于您的要求的报告。