对于表中的每个唯一键,执行select语句

时间:2013-08-05 09:56:45

标签: sql-server join dynamic

我有一张表,其中包含operatorsoperatorgroups。 运算符通过链接表链接到“operatorgroups”。 现在,对于每个'operatorgroup',我想选择链接到它的运算符。

它需要是动态的,所以当创建一个新的'operatorgroup'时,我不必调整查询。

我现在所做的是重复以下查询以列出运算符的名称和'operatorgroup'名称,但每次添加'operatorgroup'时我都必须重写查询。 如何为所有不同的“operatorgroups”

进行相同的查询
SELECT Distinct A.[ref_dynanaam], A.[naam] 
FROM [dbo].[actiedoor] A  
LEFT JOIN [dbo].[actiedoorlink] B 
ON B.[actiedoorid]=A.[unid] 
OR B.[actiedoorgroepid] = A.[unid]
WHERE B.[actiedoorgroepid] ='unid' AND status >='1' 
order by A.[naam] Desc

这给了我

ref_Dynanaam Naam
Makelaars Makelaars
Eyk,Johan van
Hoetmer,JanR
Rooijen,Manon van

请注意,只有教练出现两次。 我想列出所有'operatorgroups'的列表(对于每个不同的b.actiedoorgroepid)
屏幕截图1 由于to0几个声誉点,无法发布截图 ='actiedoor'和actiedoorlink表格中的一个子节 屏幕截图2
由于to0几个声誉点,无法发布截图 =上述查询的结果

另一个编辑:
所以,我更进了一步 通过执行以下查询,我得到了我需要的东西:

SELECT Distinct A.[ref_dynanaam], A.[naam], B.[actiedoorgroepid] 
FROM [dbo].[actiedoor] A 
LEFT JOIN [dbo].[actiedoorlink] B 
ON B.[actiedoorid]=A.[unid] 
OR B.[actiedoorgroepid] = A.[unid] 
WHERE (B.[actiedoorgroepid] 
IN (Select DISTINCT B.[actiedoorgroepid]from actiedoorlink as B 
WHERE B.[actiedoorgroepid] = B.[actiedoorgroepid])  AND A.[status] >='1') 
GROUP BY B.[actiedoorgroepid], A.[naam], A.[ref_dynanaam]  

这给了我:

ref_Dynanaam naam actiedoorgroepid
Hoetmer,Jan 4e0001
Leurink,Rob 4e0001
Rooijen,Manon van 4e0001
Soodoo,Adjai 4e0001
Ideeenmanagement Ideeenmanagement 4e0001
Eyk,Johan van 4a0002
Hoetmer,Jan 4a0002
Rooijen,Manon van 4a0002
Makelaars Makelaars 4a0002

现在,对于结果集中的每一行,我需要执行另一个子查询 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我认为你需要自我加入

SELECT A.[actiedoorid] AS [operatorid],A.[unid] 
FROM [dbo].[actiedoorlink] A
JOIN [dbo].[actiedoorlink] B  
ON A.[actiedoorgroepid]=B.[actiedoorgroepid]

答案 1 :(得分:0)

我决定采用不同的方法而忘记整个查询。相反,我决定做一个简单的查询,并使用我正在使用的程序中的过滤系统来获取我需要的数据。 谢谢你的帮助!