0

这个网站对我为工作创建的这个数据库非常有帮助,我有很多 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 字段中的数据来创建列标题,那就太好了,因为只有少数手机型号,但如果它们是静态列,那也可以。

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

如果您有任何建议,请让我知道

谢谢

史蒂夫

4

1 回答 1

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 的条目为零,则结果值为空而不是 0。如果不希望出现这种情况,请替换Count(SubQry.Handset_Site_Id)Nz(Count(SubQry.Handset_Site_Id),0)

于 2012-07-26T14:02:59.810 回答