0
我試圖從每個[測量名稱]得到一個查詢,返回失敗百分比(從現在開始的失敗百分比)。現在,我在下面的查詢中可以針對特定SMP(示例)或通配符SMP返回特定值(作爲@MEASUREMENT輸入)的失敗百分比。SQL計數:如何得到一個表中的相同值的計數
但是,我遇到了麻煩,但是,編寫一個查詢將返回所有測量值的失敗百分比,其中失敗百分比對該值是唯一的。問題是如果@MEASUREMENT是一個通配符,我只能得到COUNT函數來計算測量表中的所有失敗,所以每個失敗將具有相同的失敗%。
有沒有辦法解決這個問題,而不是使用一個表,將表的測量名稱是主鍵鏈接到我的其他表? (我不認爲這將是我的情況下,最佳的,因爲會有很多不同的測量名稱)
我的數據庫表結構是這樣的(僅包括相關的):
表:測量
列:狀態(通過/失敗),SMP ID,名稱
DECLARE @SMP varchar(50)
DECLARE @MEASUREMENT varchar(50)
SET @SMP = ''
SET @MEASUREMENT = 'Value 1'
IF(@SMP = '')
SET @SMP = '%'
IF(@SMP = '%')
SELECT DISTINCT
[Measurements].[Measurement Name],
((CONVERT(float, (SELECT COUNT(*) FROM dbo.[Measurements]
WHERE [Status] = 'Fail' AND [Measurement Name] LIKE @MEASUREMENT AND [SMP ID] LIKE @SMP))/
(CONVERT(float, (SELECT COUNT(*) FROM dbo.[Measurements]
WHERE [Measurement Name] = @MEASUREMENT AND [SMP ID] LIKE @SMP)))
)) As [Fail %]
FROM dbo.[Measurements]
WHERE [Measurements].[SMP ID] LIKE @SMP
AND [Measurements].[Measurement Name] LIKE @MEASUREMENT
ELSE
SELECT DISTINCT [Measurements].[SMP ID],
[Measurements].[Measurement Name],
((CONVERT(float, (SELECT COUNT(*) FROM dbo.[Measurements]
WHERE [Status] = 'Fail' AND [Measurement Name] LIKE @MEASUREMENT AND [SMP ID] LIKE @SMP))/
(CONVERT(float, (SELECT COUNT(*) FROM dbo.[Measurements]
WHERE [Measurement Name] = @MEASUREMENT AND [SMP ID] = @SMP)))
)) As [Fail %]
FROM dbo.[Measurements]
WHERE [Measurements].[SMP ID] LIKE @SMP
AND [Measurements].[Measurement Name] LIKE @MEASUREMENT
帶有DISTINCT的GROUP BY? – Kermit
通常我使用GROUP BY代替DISTINCT,而不是DISTINCT。 –
這正是我一直在尋找的。謝謝! –