我有 SupplierLangs 表: ID,SupplierId,SrcLngId,TrgLngId
它包含这样的数据:
1, 1000, 1, 2
2, 1000, 1, 3
3, 1000, 1, 4
4, 1000, 2, 3
5, 1000, 2, 4
6, 1001, 1, 2
7, 1001, 1, 4
8, 1001, 2, 4
9, 1002, 3, 4
当语言表格如下所示时: ID,LangName
1, En
2, De
3, Fr
4, Pl
这意味着供应商: 1000可以在:
之间进行转换En -> De
En -> Fr
En -> Pl
De -> FR
DE -> pl
1001可以在:
之间转换En -> De
En -> Pl
De -> Pl
1002可以在以下之间进行转换:
Fr -> Pl
我需要一个结果显示有多少供应商在给定的src语言中进行翻译: LangId Count
1 2 (1000, 1001)
2 2 (1000, 1001)
3 1 (1002)
4 0 (no one translate from polish)
我所实现的只计算有多少供应商使用硬编码语言进行翻译:
select count(distinct SupplierId) from SupplierLangs
where SupplierId in
(
select sr.SupplierId from SupplierLangs sr
where sr.SrcLngId = 1
group by sr.SupplierId
)
以上数据返回2(两个供应商翻译自英文) 但是如何扩展所有语言以实现上述结果?
提前致谢
答案 0 :(得分:0)
尝试这个
SELECT Count(DISTINCT supplierid)
FROM supplierlangs
WHERE supplierid IN (SELECT sr.supplierid
FROM supplierlangs sr
--where sr.SrcLngId = 1 --Remove this
GROUP BY sr.supplierid)
HAVING Count(DISTINCT supplierid) > 0 --this will remove the record having no translation
答案 1 :(得分:0)
这应该会给你一个包含源语言,目标语言和有多少供应商翻译的列表。
没有加入:
SELECT SrcLngId, TrgLngId, count(*) FROM SupplierLangs
GROUP BY SrcLngId, TrgLngId
加入:
SELECT L_SRC.ID, L_TRG.ID, COUNT(*) FROM SupplierLangs
INNER JOIN Languages AS L_SRC ON L_SRC.ID = SupplierLangs.SrcLngId
INNER JOIN Languages AS L_TRG ON L_TRG.ID = SupplierLangs.TrgLngId
GROUP BY L_SRC.ID, L_SRC.ID
你可以从中创建一个视图。
这将过滤单一语言
SELECT L_SRC.ID, L_SRC.ID, COUNT(*) FROM SupplierLangs
INNER JOIN Languages AS L_SRC ON L_SRC.ID = SupplierLangs.SrcLngId
INNER JOIN Languages AS L_TRG ON L_TRG.ID = SupplierLangs.TrgLngId
WHERE SupplierLangs.SrcLngId = 1
GROUP BY L_SRC.ID, L_SRC.ID
对于SupplierLangs(如果你还没有),你应该对SupplierId,SrcLngId,TrgLngId有一个独特的约束,以避免任何数据两次。
<强> /编辑:强> 应该工作:
SELECT SupplierSrc.SrcLngId, count(*) FROM
(
SELECT distinct SupplierId, SrcLngId FROM SupplierLangs AS SupplierSrc
)
GROUP BY SupplierSrc.SrcLngId
答案 2 :(得分:0)
如果您想要返回包含所有语言的结果以及可以从这些语言翻译的供应商数量,那么您不需要缓慢的子查询。您只需要连接和分组功能。请参阅以下查询:
select SrcLngId, count(distinct supplierid) from SupplierLangs
group by SrcLngId
这是一个整洁的优化查询
希望有所帮助
利奥
答案 3 :(得分:0)
我找到了正确的查询(但我使用的是临时表) - 没有它的解决方案吗?
select distinct sr.SrcLngId, sr.SupplierId
into #myTable99
from SupplierLangs sl
select SrcLngId, count(SrcLngId) as [count] from #myTable99 temp
group by SrcLngId
drop table #myTable99
感谢所有人的回复!