, - , UNPIVOT, AVG ( NULL):
DECLARE @Tbl TABLE
(
ID int,
B1 int,
B2 int,
B3 int
)
INSERT @Tbl (ID, B1, B2, B3) VALUES (1, 10, 20, 30)
INSERT @Tbl (ID, B1, B2, B3) VALUES (2, 10, NULL, 30)
INSERT @Tbl (ID, B1, B2, B3) VALUES (3, 10, NULL, NULL)
SELECT ID, AVG(Value) AS Average
FROM @Tbl
UNPIVOT (Value FOR B IN (B1, B2, B3)) AS u
GROUP BY ID
ID, ROW_NUMBER:
;WITH CTE AS
(
SELECT
B1, B2, B3,
ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS ID
FROM @Tbl
)
SELECT ID, AVG(Value)
FROM CTE
UNPIVOT (Value FOR B IN (B1, B2, B3)) AS u
GROUP BY ID