一个临时表具有700多个带有PK的记录。 12列包含查找表中的ID值。每个查找表中都有4-8条记录。如何获取表LookupA中每个Id值的记录计数,该值通过PK与其他所有查找表中的Id值有关系?每个查询表中的每个查询值都需要与其他所有查询表和值进行比较,以获取记录计数。
我可以编写一条SQL语句来获取特定列的特定值,但这是一个漫长的练习,并且会降低proc的速度。
这是数据样本。
PK LookupA LookupB LookupC
1 1 1 3
2 1 2 3
3 1 3 2
4 2 4 2
5 4 1 1
6 3 2 1
7 2 3 3
8 4 4 3
9 4 3 2
10 1 1 2
结果需要将LookupA与LookupB和LookupC进行比较以获得行计数。
Table Value LookupB 1 2 3 4 LookupC 1 2 3
LookupA 1 2 1 1 0 0 2 2
2 0 0 1 1 0 1 1
3 0 1 0 0 1 0 0
4 1 0 1 1 1 1 1
然后将LookupB与LookupA和LookupC进行比较。 然后将LookupC与LookupA和LookupB进行比较。
答案 0 :(得分:0)
如果我理解正确,那么您的临时表包含其他表的外键,那么为什么不简单地使用联接呢?像这样的东西。
SELECT COUNT(DISTINCT lookupA.id) as CountA
, COUNT(DISTINCT lookupB.id) as CountB
, etc...
FROM #temp_table t
LEFT OUTER JOIN lookupA a on a.id = t.lookupA
LEFT OUTER JOIN lookupB b on b.id = t.lookupB
...etc
如果可能的话,我建议您对设计进行审查。有这么多的小表会使事情变得复杂,难道无法合并它而仅拥有一个查询表吗?您可以有一个附加字段“ LookupType”,所有查找都可以在同一位置,这将使检索变得更加简单。
答案 1 :(得分:0)
使用此代码,您可以成对获取A,B和C的所有组合的数字:
select 'A-B' as Combination, LookupA, LookupB, count(*) as NumRecords
from table
group by Combination,LookupA, LookupB
UNION
select 'A-C' as Combination, LookupA, LookupC, count(*) as NumRecords
from table
group by Combination,LookupA, LookupC
UNION
select 'B-C' as Combination, LookupB, LookupC, count(*) as NumRecords
from table
group by Combination,LookupB, LookupC
在此之后,如果您想查看LookupA与B和C的所有值, 寻找A-B和A-C组合
答案 2 :(得分:0)
我使用下面的语句的少量派生词,没有任何UNION,使我可以进入我想去的地方。
/ * 选择“ A-B”作为组合,选择LookupA,LookupB,count(*)作为NumRecords 从表 按组合,LookupA,LookupB分组 * /
我使用了变量和WHILE循环将各种摘要放置在需要的地方。