如何将这两个查询合并为一个?
Posted
技术标签:
【中文标题】如何将这两个查询合并为一个?【英文标题】:How do I combine these two queries into one? 【发布时间】:2012-01-09 14:27:20 【问题描述】:查询1:
SELECT DISTINCT FirstOfFrequencyMHz, Min(LicenceData.distance) AS CoFX
FROM [Freq List], LicenceData
WHERE ((([LicenceData].class_stat) Like 'F*') And (([LicenceData].type_lc)="A") And (([LicenceData].frequency) Between FirstOfFrequencyMHz-0.0249 And FirstOfFrequencyMHz+0.0249))
GROUP BY FirstOfFrequencyMHz
查询2:
SELECT DISTINCT FirstOfFrequencyMHz, Min(LicenceData.distance) AS CoMO
FROM [Freq List], LicenceData
WHERE ((([LicenceData].class_stat) Like 'M*') And (([LicenceData].type_lc)="A") And (([LicenceData].frequency) Between FirstOfFrequencyMHz-0.0249 And FirstOfFrequencyMHz+0.0249))
GROUP BY FirstOfFrequencyMHz
组合查询尝试:
SELECT DISTINCT FirstOfFrequencyMHz,
(SELECT Min(distance) AS Expr1
FROM [Freq List], LicenceData
WHERE ((([LicenceData].class_stat) Like 'F*') And (([LicenceData].type_lc)="A") And (([LicenceData].frequency) Between FirstOfFrequencyMHz-0.0249 And FirstOfFrequencyMHz+0.0249))) as COFX,
(SELECT Min(distance) AS Expr1
FROM [Freq List], LicenceData
WHERE ((([LicenceData].class_stat) Like 'M*') And (([LicenceData].type_lc)="A") And (([LicenceData].frequency) Between FirstOfFrequencyMHz-0.0249 And FirstOfFrequencyMHz+0.0249))) as COMO
FROM [Freq List]
我发布的组合查询尝试未返回正确的值,CoFX 和 CoMO 列的所有单元格中都有相同的数字。
这两个查询独立工作,我只需要知道如何组合它们(我需要组合的总共 4 个查询类似于前 2 个发布的查询),或者甚至可以组合它们。
【问题讨论】:
我看不出您的样本输入与样本输出有何关联。 我看了几遍头都疼了,你是怎么把CoChnl / AdjChnl带进来的,你能简化一下你的解释吗? 添加了信息/简化(我希望)。此外,我输入的输入只是该表中行的一小部分样本。输出对于每个中心频率的固定和移动许可证类别来说,中心频率和最近距离至关重要。 您必须定义组合的含义。我能看到的 2 个查询之间的唯一区别是 Like "F*" 和 Like "M*"。如果您在 WHERE 子句中组合它们,您的结果将包含多行,但您的示例似乎表明您希望每个结果都有一个单独的列。请澄清。 我认为从我发布的查询组合尝试中我想要完成的工作相当明显。你自己似乎也意识到了这一点。我想要一个查询,其中包含 FirstOfFrequencyMHz、CoFX 和 CoMO 列,因为它们分别出现在两个单独的查询中。 【参考方案1】:这可能是最好的方法,因为表之间没有直接链接,您需要使用子选择以确保正确引用它们:
SELECT DISTINCT F.FirstOfFrequencyMHz,
(
SELECT Min(L.Distance)
FROM LicenceData As L
WHERE L.Class_Stat Like 'F*'
AND L.Type_LC = 'A'
AND L.Frequency Between F.FirstOfFrequencyMHz-0.0249 And F.FirstOfFrequency+0.0249
) CoFX,
(
SELECT Min(L2.Distance)
FROM LicenceData As L2
WHERE L2.Class_Stat Like 'M*'
AND L2.Type_LC = 'A'
AND L2.Frequency Between F.FirstOfFrequencyMHz-0.0249 And F.FirstOfFrequency+0.0249
) CoMO
FROM [Freq List] As F
祝你好运:)
【讨论】:
欢迎您,我花了一段时间才明白这一点:) 我收到了一些关于这种影响的反馈。我仍然感到惊讶的是,这么多人似乎发现我的问题令人困惑(在我重新提出问题之后,我如何开始提出问题,如果不是不可避免地令人困惑的话,这无疑是潜在的困惑)。您是否难以理解我想要达到的目标或如何实现它?我问的主要原因是,由于我倾向于表达事物的方式,我知道沟通问题,我一直在努力变得更好。 @Bryan 重写后没问题,你提出的 SQL 语句真的很有帮助,因为我可以从阅读中得到想法,有时它比关于你试图实现的段落更容易理解。老实说,越短越简单。以上是关于如何将这两个查询合并为一个?的主要内容,如果未能解决你的问题,请参考以下文章