如何将SQL表中的数据分组以显示每个组合?

如何将SQL表中的数据分组以显示每个组合?,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,使用SQLServer2008和这个完全虚构的场景和数据,我如何转换这个(不完整的)数据库表 最后一张表格应该包含其城市中的每个城镇以及与该城镇和城市相关的所有(不同)动物组合 我一直在考虑一个支点,但找不到解决这个特殊问题的解决方案 我希望理解这个概念,这样我就可以将这项技术应用到实际数据中,而实际数据要复杂一些。您需要的解决方案是将表本身交叉连接三次,然后过滤掉double和triple 你可以查一下 代码是: SELECT T1.Country, T1.Town,

使用SQLServer2008和这个完全虚构的场景和数据,我如何转换这个(不完整的)数据库表

最后一张表格应该包含其城市中的每个城镇以及与该城镇和城市相关的所有(不同)动物组合

我一直在考虑一个支点,但找不到解决这个特殊问题的解决方案


我希望理解这个概念,这样我就可以将这项技术应用到实际数据中,而实际数据要复杂一些。

您需要的解决方案是将表本身交叉连接三次,然后过滤掉double和triple

你可以查一下

代码是:

SELECT  T1.Country,
        T1.Town,
        T1.Pet AS Pet1,
        T2.Pet AS Pet2,
        T3.Pet AS Pet3
FROM    Pets T1
        CROSS JOIN Pets T2
        CROSS JOIN Pets T3
WHERE   T1.Pet <> T2.Pet
        AND T2.Pet <> T3.Pet 
        AND T1.Pet <> T3.Pet    
        AND T1.Country = T2.Country
        AND T1.Country = T3.Country
        AND T1.Town = T2.Town
        AND T1.Town = T3.Town
选择T1.国家/地区,
T1.市区,
T1.Pet作为Pet1,
T2.Pet作为Pet2,
T3.宠物作为宠物3
来自宠物T1
交叉连接宠物T2
交叉连接宠物T3
其中T1.Pet T2.Pet
和T2。宠物T3。宠物
和T1.Pet T3.Pet
T1.国家=T2.国家
T1.国家=T3.国家
T1.Town=T2.Town
T1.Town=T3.Town

我认为您误解了PIVOT的含义。PIVOT用于将行转换为列…是的,我感到困惑。关于如何实现上述内容,您有什么建议吗?请查看我的解决方案。你需要交叉连接。Dan,你还记得下面的答案是否对你的用例有帮助吗?虽然堆栈溢出不是强制性的,但我们鼓励问题作者接受好的答案,如果他们能够接受的话。这些不是交叉连接。它们是内部联接(精确地说是非等联接)。您只是将联接条件移动到了
WHERE
子句,这被认为是错误的样式。结果是:返回的行太多,因为所有组合都是多重的。将
更改为