Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 故意在查询中保留空白字段_Sql_Ms Access - Fatal编程技术网

Sql 故意在查询中保留空白字段

Sql 故意在查询中保留空白字段,sql,ms-access,Sql,Ms Access,我有一个Microsoft Access数据库,该数据库具有下表: TableName: Parts Cabinet ID - Number Part ID - Number PartClass - Number Width - Number (double) Length - Number (double) Description - Text 我使用以下SQL查询获得三个视图: DoorPanels: SELECT Parts.[Cabinet ID], Count(Parts.[Cabi

我有一个Microsoft Access数据库,该数据库具有下表:

TableName: Parts
Cabinet ID - Number
Part ID - Number
PartClass - Number
Width - Number (double)
Length - Number (double)
Description - Text
我使用以下SQL查询获得三个视图:

DoorPanels:
SELECT Parts.[Cabinet ID], Count(Parts.[Cabinet ID]) as Qty, Parts.Description as Name Parts.Width, Parts.Length 
FROM Parts
WHERE PartClass=13 GROUP BY Parts.[Cabinet ID], Parts.Description, Parts.Width, Parts.Length
ORDER BY Parts.[Cabinet ID]

DoorRails:
SELECT Parts.[Cabinet ID], Count(Parts.[Cabinet ID]) as Qty, Parts.Description as Name Parts.Width, Parts.Length 
FROM Parts
WHERE PartClass=14 GROUP BY Parts.[Cabinet ID], Parts.Description, Parts.Width, Parts.Length
ORDER BY Parts.[Cabinet ID]

DoorStiles:
SELECT Parts.[Cabinet ID], Count(Parts.[Cabinet ID]) as Qty, Parts.Description as Name Parts.Width, Parts.Length 
FROM Parts
WHERE PartClass=15 GROUP BY Parts.[Cabinet ID], Parts.Description, Parts.Width, Parts.Length
ORDER BY Parts.[Cabinet ID]
这给了我三个单独的视图,它们只包含我想要的部分。现在,我有一个额外的表:

TableName: Doors
Cabinet ID - Number
Door ID - Number
Width - Number (double)
Height - Number (double)
我还使用另一个查询为此创建视图:

SELECT Doors.[Cabinet ID], Count(Doors.[Door ID]) as Qty FROM Doors GROUP BY Doors.[Cabinet ID] ORDER BY Doors.[Cabinet ID]
所以,最后我想把所有这些结合在一起……但这是我有点不知所措的地方。我需要从我检索到的数据中得到如下结果:

Doors.[Cabinet ID]    Doors.Qty    DoorRails.*    DoorStiles.*  DoorPanels*
1                     2            [data]         [data]        [data]
                                   [data]         [data]        [data]
2                     3            [data]         [data]        [data]
                                   [data]         [data]        [data]
                                   [data]         [data]        [data]
现在,为了解释我在上面的结果中所说的内容,您可以看到对于[Cabinet ID]1,我的门数量为2,因此我需要该门零件的2条记录。[Cabinet ID]2有3个门,因此我需要3个记录,记录所有门部件

现在,我知道这有点复杂,而且可能…嗯…不可能,但我已经为此工作了几天,还没有想出任何办法。如果这不可能,我会感谢这里的专家告诉我


仅供参考-我无法对数据库或结构进行任何更改,我所能做的就是对其运行查询。

我认为最简单的方法是通过笛卡尔连接到一个表,该表的行数仅为一个字段,从1增加到您所需的最大门数。比如说,

Counter.Num
-----------
1
2
3
SELECT TOP 1 1 AS Num FROM msysobjects
UNION ALL
SELECT TOP 1 2 AS Num FROM msysobjects
UNION ALL
SELECT TOP 1 3 AS Num FROM msysobjects
如果您甚至无法创建供自己使用的本地表,则可以使用联合查询模拟上述情况。Access有一些,所以即使不使用现有表的任何行,也需要引用该表。比如说,

Counter.Num
-----------
1
2
3
SELECT TOP 1 1 AS Num FROM msysobjects
UNION ALL
SELECT TOP 1 2 AS Num FROM msysobjects
UNION ALL
SELECT TOP 1 3 AS Num FROM msysobjects
然后按如下方式使用此计数器表/查询:

SELECT D.[Cabinet ID], C.Num & " of " & Count(D.[Door ID]) AS [Door Number], 
       DR.*, DS.*, DP.* 
FROM Counter AS C, 
     ((Doors AS D INNER JOIN DoorRails AS DR ON D.CabinetID=DR.CabinetID)
                  INNER JOIN DoorStiles AS DS ON D.CabinetID=DS.CabinetID)
                  INNER JOIN DoorPanels AS DP ON D.CabinetID=DP.CabinetID
WHERE C.Num <= Count(D.[Door ID])
GROUP BY D.[Cabinet ID] 
ORDER BY D.[Cabinet ID], C.Num
选择D.[机柜ID]、C.Num和“of”&计数(D.[门ID])作为[门编号],
博士*,博士*,博士*
从计数器C开始,
((作为D的门与作为D.CabinetID=DR.CabinetID上的DR的内连接门轨)
D.CabinetID=DS.CabinetID)上的DS内连接门扇
按照D.CabinetID=DP.CabinetID上的DP连接内门板

在C.Num中,这在任何数据库中都不是微不足道的,而且在访问中更难。我理解这一点,因此需要寻求帮助。在过去的两个月里,我为我正在进行的项目创建了300多个查询,这是唯一一个真正困扰我的查询。谢谢。我试过了,它告诉我,
不能对用“*”(DR)选择的字段进行分组。
谢谢。这是真的。我把它作为速记,因为我不知道这些表中有哪些字段。您必须按名称添加这些字段,并将它们也包括在GROUPBY子句中。如果性能成为一个问题,您实际上可能希望先使用
而不是
分组依据