次のコードと、SQL Server Management Studio 2012で作成された次のクエリがあります。私はActualHoursPerWeek
だろうSUMIFをTSQLに翻訳する
ClientID
と列になり
=SUMIF(G2:G961,G2,I2:I961)
:
WITH cteUniqueClients AS
(
SELECT
CASE
WHEN ServiceActualEndDate IS NULL
AND LAG(ClientID,1) OVER(PARTITION BY ClientID, ServiceProvider ORDER BY ServiceActualEndDate DESC, StartDateFormatted DESC) = ClientID
THEN 0
WHEN ServiceActualEndDate IS NOT NULL
THEN 0
ELSE 1
END AS UniqueClient,
CASE
WHEN LAG(ActualHoursPerWeek,1) OVER (PARTITION BY ClientID, ServiceProvider ORDER BY StartDateFormatted DESC) = ActualHoursPerWeek
THEN 0
ELSE 1
END AS UniqueService,
ClientID, ClientName,
ActualHoursPerWeek,
ServicePlannedStartDate, ServiceActualStartDate
FROM
dbo.tTable1
WHERE
(ServiceActualStartDate <= '2016-08-09' OR ServicePlannedStartDate <= '2016-08-09')
AND ServiceActualEndDate IS NULL
AND (ServicePlannedEndDate > '2016-08-09' OR ServicePlannedEndDate IS NULL)
AND ClientDeathDate IS NULL
)
SELECT
COUNT(ClientID) OVER (PARTITION BY ClientID ORDER BY ClientID) AS RecordCount,
cteUniqueClients.*
FROM
cteUniqueClients
WHERE
UniqueService = 1
ORDER BY
ClientID ASC
そして、次のExcelの数式。
すべてのレポート列を保持しながらこれら2つを結びつける方法はありますか?
以下は、望ましいExcel出力のイメージです。
あなたは 'SUMIF'で何を達成しようとしていますか?これは、その行とすべての下位行(上位行が除外されている)から 'ClientID'のために' ActualHoursPerWeek'を追加するようです。したがって、 'ClientID'が行1-3で同じなら、行1は1-3の合計を得、行2は2-3の合計を得、行3はそれ自身を得るでしょう。 (式が1つのセルで作成され、コピーされたと仮定して) – SMM
@SMMこれは、Excelファイルの結果が正しいことを示しています。私はClientIDとAcutalHoursPerWeekでデータをソートし、一意のクライアント列を使用して一意のクライアントのみを表示することもできますが、合計時間も表示できます。 これはちょっとばかだと申し訳ありません – NHier1992
元のシートには、合計に下の行だけが含まれていることを確認するために、非常に特定の並べ替え順序が必要です。それらの列はテーブルに含まれていますか?目的の出力イメージを作成するために使用したソースExcelを確認すると役立ちます。また、おそらくテーブルスキーマ。 – SMM