-3
計算方法毎週の従業員の総勤務時間。あなたのテーブルの構造を知らないTsqlで週勤務時間の従業員を計算する方法
employee week1 week2 week3 week4
rams 50 48 49 54
計算方法毎週の従業員の総勤務時間。あなたのテーブルの構造を知らないTsqlで週勤務時間の従業員を計算する方法
employee week1 week2 week3 week4
rams 50 48 49 54
は、それが困難になるが、それは以下の本に似ている場合:あなたは動的SQLを使用したピボットを使用することができます。
DECLARE @dynamicSql AS nvarchar(max)
DECLARE @dynamicCols AS nvarchar(max);
IF OBJECT_ID('tempdb..#tempHours') IS NOT NULL
DROP TABLE #tempHours
CREATE TABLE #tempHours (
empId int,
workDate datetime,
hoursWorked money
)
INSERT INTO #temphours
VALUES (1, '1/2/2016', 8.5)
INSERT INTO #temphours
VALUES (2, '2/3/2016', 8.5)
INSERT INTO #temphours
VALUES (3, '3/4/2016', 8.5)
INSERT INTO #temphours
VALUES (4, '4/5/2016', 8.5)
INSERT INTO #temphours
VALUES (5, '5/6/2016', 8.5)
INSERT INTO #temphours
VALUES (1, '1/3/2016', 8.5)
INSERT INTO #temphours
VALUES (1, '1/4/2016', 8.5)
INSERT INTO #temphours
VALUES (2, '2/4/2016', 8.5)
INSERT INTO #temphours
VALUES (3, '3/5/2016', 8.5)
INSERT INTO #temphours
VALUES (4, '4/6/2016', 8.5)
INSERT INTO #temphours
VALUES (5, '5/7/2016', 8.5)
-- Construct the column list for the IN clause
SET @dynamicCols = STUFF((SELECT
N',' + QUOTENAME(w) AS [text()]
FROM (SELECT DISTINCT
DATEPART(wk, workDate) AS W
FROM #temphours) AS W
ORDER BY W
FOR xml PATH (''))
,
1, 1, N'');
-- Construct the full T-SQL statement
-- and execute dynamically
SET @dynamicSql = N'SELECT *
FROM (SELECT empId, datepart(wk,workDate) as WeekNo, hoursWorked
FROM dbo.#temphours) AS I
PIVOT(SUM(hoursWorked) FOR WeekNo IN(' + @dynamicCols + N')) AS P;';
EXEC sp_executesql @dynamicSql;
GO
、これはそこにあなたを取得しますSUM()をお試しください。
SELECT Color, SUM(ListPrice), SUM(StandardCost)
FROM Production.Product
WHERE Color IS NOT NULL
AND ListPrice != 0.00
AND Name LIKE 'Mountain%'
GROUP BY Color
ORDER BY Color;
GO
私は質問の少し詳細があなたに良い答えを得ると信じています。
これは必要な出力ですか?もしそうなら、あなたのDBスキーマは生データを含んでいますか? – AdaTheDev
ええ。従業員の勤務時間に基づいています。 @AdaTheDev –
ソースデータとそのテーブル構造を指定してください。 – iamdave