查询两个表&在Access中使用记录数据作为列标题?

时间:2012-07-26 12:06:43

标签: ms-access

这个网站对我正在创作的这个数据库非常有帮助,我有很多VB知识,但很少有SQL。

我正在创建一个cisco IP电话数据库,它记录MAC,连续出版物以及分配给它们的网站ID。

我的经理们现在决定再次更改我的应用程序的目标帖子,现在要求我创建一个以我不知道该怎么做的方式显示数据的表单。

他们现在想要什么以及我希望以某种方式实现的是创建一个sql语句,该语句通过站点ID获取数字手机的数量,然后将该数字与另一个表中的数据进行比较。

以下是我们需要处理的字段:

TABLE 1
Handset_Type
Handset_Site_Id

TABLE 2
Handset_Type
Handset_Site_Id

这就是我想要显示数据的方式

SITE ID        | Handset_Type1      | Handset_Type1 
Handset_Site_id1 |COUNT TYPE1 FROM T1|COUNT TYPE1 FROM T2 
Handset_Site_id2 |COUNT TYPE1 FROM T1|COUNT TYPE1 FROM T2 

如果我们可以使用Handset_type字段中的数据来创建列标题,那么这将是很好的,因为只有少数型号的手机,但如果它们是静态列,那么也可以。

我希望我已经解释了这个,因为我可以看到这可能很难理解。

如果您有任何建议,请告诉我

谢谢

史蒂夫

1 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,您希望为每个站点ID提供两个表中的记录计数,手机类型和源表格作为列标题。

第一步是将表合并到一个表中,创建一个表示手机类型和源表的列:

SELECT Handset_Type & " in T1" as TypeFromT, Handset_Site_Id FROM [Table 1]
UNION ALL
SELECT Handset_Type & " in T2" as TypeFromT, Handset_Site_Id FROM [Table 2]

这将形成交叉表的内部查询。交叉表的语法可能有点棘手,所以我通常在设计视图中构建我的语法。我们将TypeFromT定义为新的列标题,我们将Handset_Site_Id用作行分组和计数字段:

TRANSFORM Count(SubQry.Handset_Site_Id) AS SiteIDCount
SELECT SubQry.Handset_Site_Id
FROM (
    SELECT Handset_Type & " in T1" as TypeFromT, Handset_Site_Id FROM [Table 1]
    UNION ALL
    SELECT Handset_Type & " in T2" as TypeFromT, Handset_Site_Id FROM [Table 2]
) AS SubQry
GROUP BY SubQry.Handset_Site_Id
PIVOT SubQry.TypeFromT;

唯一的问题是,如果特定手机类型,源表和站点ID的条目为零,则结果值将为null而不是0.如果不希望这样,请将Count(SubQry.Handset_Site_Id)替换为{ {1}}