![](/img/trans.png)
[英]Advanced SQL Query Design Help (Duplicates across two tables, multiple fields, possible exclusions based on one field)
[英]SQL Query design across multiple normalized tables
表關系圖:
基本查詢是:
SELECT DateTime, SubgroupID, TestID
FROM Subgroups
WHERE CharID IN (SELECT CharID FROM CharList WHERE ChartType = 2) AND PtLoc > 0
然后我將遍歷記錄集以獲取其他信息:
SELECT DefectDescription, Value
FROM DefectDescriptions, DataValues
WHERE SubgroupID = (SubgroupID from above) AND DefectID = SampleNumber
對於上面的每條記錄:
SELECT TextValue AS PartNum
FROM ParameterEntries
WHERE
TestID = (TestID from above)
AND ParameterID = (SELECT ParameterID FROM ParameterDefinitions WHERE ParameterName = "PartNum")
SELECT TextValue AS SerialNum
FROM ParameterEntries
WHERE
TestID = (TestID from above)
AND ParameterID = (SELECT ParameterID FROM ParameterDefinitions WHERE ParameterName = "SerialNum")
要構建表:
DateTime, PartNum, SerialNum, DefectDescription, Value(number of defects)
這可以在單個查詢中完成,而不是遍歷每條記錄以從鏈接表中獲取記錄嗎?
如果您加入表,您可以將其作為一個查詢進行
SELECT
Subgroups.DateTime, DefectDescriptions.DefectDescription, DataValues.Value,
Subgroups.TestID, Count(*) AS NumberOfDefects,
MAX((SELECT MAX(E.TextValue)
FROM ParameterDefinitions AS D
INNER JOIN ParameterEntries AS E ON D.ParameterID = E.ParameterID
WHERE D.ParameterName="PartNum" AND E.TestID=Subgroups.TestID)
) AS PartNum,
MAX((SELECT MAX(E.TextValue)
FROM ParameterDefinitions AS D
INNER JOIN ParameterEntries AS E ON D.ParameterID = E.ParameterID
WHERE D.ParameterName="SerialNum" AND E.TestID=Subgroups.TestID)
) AS SerialNum
FROM
DefectDescriptions
INNER JOIN DataValues
ON DefectDescriptions.DefectID = DataValues.SampleNumber
INNER JOIN Subgroups
ON DataValues.SubgroupID = Subgroups.SubgroupID
INNER JOIN CharList
ON CharList.CharID = Subgroups.CharID
WHERE
CharList.CharType=2 AND Subgroups.PtLoc>0
GROUP BY
Subgroups.DateTime, DefectDescriptions.DefectDescription,
DataValues.Value, Subgroups.TestID;
如果您將此作為 SQL(在 SQL 視圖中)復制/粘貼到查詢設計器中,您將看到在切換回設計視圖時表是如何連接的。 這兩個參數是通過子查詢選擇的。
您還必須使用 GROUP BY 子句才能使用Count(*)
缺陷Count(*)
也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.