皆さんおはよう
わかりました。likeを使用してパーセンテージを取得する方法を知っています。
ROUND(CAST(SUM(Col1)AS FLOAT) *100.0 / COUNT(*),2)
しかし、ここが私が立ち往生しているところです。
DECLARE @pYWK INT
SET @pYWK = (SELECT YWK FROM CHDS_Management.dbo.Calendar
WHERE DT = (SELECT DATEADD(WEEK,-3, CONVERT(DATE,GETDATE()))));
SELECT
ORD.ProductWhsLocation AS 'Location',
COUNT(ORD.ProductWhsLocation) AS 'Picked'
FROM CHDS_Common.dbo.OMOrder AS ORD
INNER JOIN CHDS_Management.dbo.PickZoneControl AS PZC ON
LEFT(ORD.ProductWhsLocation,3) = PZC.PickZone
INNER JOIN CHDS_Management.dbo.Calendar AS CAL ON CAL.DT =
ORD.EarliestPickDate
WHERE CAL.YWK = @pYWK AND ORD.PickedQty <> 0
GROUP BY ORD.ProductWhsLocation
私が解決しようとしているのは、選択された合計のうち、各場所から選択されたものの割合です。
ここは月曜日の朝なので、何かバカなことがないのならごめんなさい。
これについて助けてくれてありがとう。
各グループのパーセンテージを取得するには(1つの集計が必要)、クエリ全体の合計数(別の集計)でそれらのカウントを正規化する必要があるため、これは難しい質問です。1つのアプローチは、基本結合クエリをCTEに配置することです。次に、そのCTEにクエリを実行し、同じCTEのサブクエリを介して合計数を取得します。
WITH cte AS (
SELECT
ORD.ProductWhsLocation AS 'Location'
FROM CHDS_Common.dbo.OMOrder AS ORD
INNER JOIN CHDS_Management.dbo.PickZoneControl AS PZC
ON LEFT(ORD.ProductWhsLocation,3) = PZC.PickZone
INNER JOIN CHDS_Management.dbo.Calendar AS CAL
ON CAL.DT = ORD.EarliestPickDate
WHERE CAL.YWK = @pYWK AND ORD.PickedQty <> 0
)
SELECT
Location,
COUNT(Location),
ROUND(100.0 * COUNT(Location) / (SELECT COUNT(*) FROM cte), 2) AS pct
FROM cte
GROUP BY
Location;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加