T-SQL 中有沒有一種方法可以在不代表單個位的欄位上聚合邏輯條件?
例如,給定以下資料:
CREATE TABLE #Example (category int, flags int)
INSERT INTO #Example VALUES (1, 1) -- Binary 0001
INSERT INTO #Example VALUES (1, 2) -- Binary 0010
我想要一個類似于以下內容的查詢:
SELECT AND(flags) FROM #Example
GROUP BY Category
-- Expect the result to be 0 because 0001 AND 0010 = 0000
SELECT OR(flags) FROM #Example
GROUP BY Category
-- Expect the result to be 3 because 0010 OR 0001 = 0011
在單個位欄位上,我知道您可以轉換為 int,然后使用 max 和 min,但這僅適用于單個位值,因此不能解決問題。
此外,雖然我試圖在 SQL 中解決這個問題,但最終我想在 EF/Linq 運算式中完成它,這可能有一種 SQL 沒有的方法?
uj5u.com熱心網友回復:
SQL Server 沒有這樣的聚合函式。您可以使用 SQLCLR 創建一個。
但更簡單的選擇是將每一位分開并單獨聚合,然后將它們重新加在一起。
為了OR
SELECT
MAX(flags & 1)
MAX(flags & 2)
MAX(flags & 4)
MAX(flags & 8)
FROM #Example
GROUP BY Category
為了AND
SELECT
MIN(flags & 1)
MIN(flags & 2)
MIN(flags & 4)
MIN(flags & 8)
FROM #Example
GROUP BY Category
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/431788.html
