我有一个通用的“ Dimension”和“ DimensionMember”表。
CREATE TABLE [dbo].[Dimension]
(
[ID] [int] NOT NULL IDENTITY(1, 1),
[Label] [nvarchar] (255)
)
CREATE TABLE [dbo].[DimensionMember]
(
[ID] [int] NOT NULL IDENTITY(1, 1),
[Label] [nvarchar] (255) NOT NULL,
[DimensionID] [int] NOT NULL
)
GO
ALTER TABLE [dbo].[DimensionMember] ADD CONSTRAINT [FK_DimensionMember_DimensionID_Dimension_ID] FOREIGN KEY ([DimensionID]) REFERENCES [dbo].[Dimension] ([ID])
这些表存储大量维和维成员。
我想从可变数量的维中交叉连接维成员。示例:“性别”,“就业类型”,“合同类型”维度中的交叉联接维度成员应产生以下组合
'Male,Full time, Employee'
'Female,Full time, Employee'
'Male,Part time, Employee'
'Female,Part time, Employee'
'Male,Full time, Contractor'
'Female,Full time, Contractor'
'Male,Part time, Contractor'
'Female,Part time, Contractor'
组合的标签应通过连接维度成员的标签来创建(如上所示)。
先感谢您
维度列表(例如“性别”,“就业类型”,“合同类型”)是DYNAMIC(由运行时的另一个查询生成)。
修复了一个小错误(维度1->维度)。对不起!
这种模式怎么样?(SQL小提琴)
select a.label+','+b.label+','+c.label
from (select m.label from dimension1 d
join dimensionmember m
on m.dimensionid = d.id and d.label = 'sex') a
cross join (select m.label from dimension1 d
join dimensionmember m
on m.dimensionid = d.id and d.label = 'Employment Type') b
cross join (select m.label from dimension1 d
join dimensionmember m
on m.dimensionid = d.id and d.label = 'Contract Type') c
当然,您需要知道要构建多少个子查询,因此需要将SELECT中的串联部分保留多长时间。
编辑
这是一个完成所有任务的工具(更新了SQL Fiddle)
;with base as (
select m.label, d.id, dense_rank() over (order by d.id) rk
from dimension1 d
join dimensionmember m
on m.dimensionid = d.id
where d.label in ('sex','Employment Type','Contract Type')
), cte as (
select cast(label as varchar(max)) list, rk
from base
where rk=1
union all
select cast(cte.list+','+base.label as varchar(max)), base.rk
from cte
join base on base.rk=cte.rk+1
)
select list
from cte
where rk=(select max(rk) from base)
主要内容:笛卡尔积前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 在 MySQL 中,多表查询主要有交叉连接、内连接和外连接。由于篇幅有限,本节主要讲解交叉连接查询。内连接和外连接将在《 MySQL内连接》和《 MySQL外连接》中讲解。 交叉连接(CROSS JOIN)一般用来返回连接表的笛卡尔积。 本节
问题内容: 我正在尝试从表中的每个元素中提取所有对对,而该表是同一张表中的每个元素,这是我的查询: 我处于只需要一半记录的情况。我的天真尝试是: 但我无法在插入时查询目标表,如SQL Server所述: 我怎样才能有效地做到呢? 编辑 仅供参考,我说:“我需要一半的记录”,这是错误的,在服用后账户记录计数是 问题答案: 因此,只需对连接进行条件调整,以使左侧始终等于或小于左侧!
问题内容: 我只知道有关SQL的最低要求,所以请把我当作一个完整的菜鸟! 我有一个表,其中有很多行,但是其中一些行可以通过id配对,我想合并这些行的返回数组。 作为按比例缩小的版本,想象一下我表的上方,我的目标是返回2个结果 基于ID相关并且c2的值为’on’ 我的尝试是从一些阅读中得到以下内容,但没有得到 任何帮助将不胜感激 编辑 我认为Id只需发布下面的语法就可以了,这要归功于下面的答案: 再
本文向大家介绍Microsoft SQL Server 交叉连接,包括了Microsoft SQL Server 交叉连接的使用技巧和注意事项,需要的朋友参考一下 示例 A cross join是笛卡尔联接,表示两个表的笛卡尔乘积。此联接不需要任何条件即可联接两个表。左表中的每一行将连接到右表中的每一行。交叉联接的语法: 例: 结果: 请注意,还有其他方法可以应用CROSS JOIN。这是无条件的
问题内容: 我有一个未知数量的数组,每个数组包含一个未知数量的单词。我想连接每个列表中的值,以便将单词的所有可能的变体存储到最终数组中。 例如,如果数组1包含: 数组2包含: 数组3包含: 我希望输出为: 可能有3个以上的列表,每个列表很可能包含2个以上的单词。 我想用PHP做到这一点。 如果我知道列表的数量,我知道该怎么做,尽管这可能不是最节省资源的方法。但是,如果您知道数组的数量,则嵌套循环会
我遇到了一个问题,在这个问题中,您应该交换双链接列表中的一组节点。例如:对于列表