동일한보기에서 두 열의 중앙값을 계산하려는 경우 열 PtA
및 PtC
을 호출합니다. 데이터의 특성상, PtA
이 NULL
일 때 행은 중앙값 계산에 포함되지 않아야합니다. 그러나 이 아닌이 경우는 NULL
이 아니므로 PtC
의 경우입니다. PtA
과 PtC
이 모두 NOT NULL
인 경우 이들을 결합해야합니다. 그러나 PtA
이 NULL
이지만 PtC
이 NOT NULL
이면 필드는 PtC
으로 표시되어야하고 PtA
열에는 NULL
값이 삽입되어야합니다.SQL 두 테이블을 결합하거나 결합 하시겠습니까?
저는이 실행의 이론을 이해하는 데 어려움을 겪고 있습니다. 현재 WITH
문을 사용하여 하나의 테이블에 모든 PtA
관련 데이터가있는 두 테이블을 가져오고 다른 테이블에는 모두 PtC
데이터를 가져옵니다.
PtA
- 및 PtC
- 관련 테이블에서 IUNION ALL
을 사용하면 모든 데이터가 캡처되지만 분명히해야 할 필드를 결합하지 않아도됩니다. 위에 제한된대로이 데이터를 "조인/병합"하는 방법이 있습니까? 나는 테이블을 JOIN
때 제대로 데이터의 전체 범위를 캡처 테이블을 조인하기에 더 ID가 없기 때문에
는 PtA
테이블에 존재하지 않는 어떤 PtC
관련 항목은 존재하지 않을 것입니다.
편집 : 옆 효율성의 UNION ALL
에 포착되는 관련 데이터 JOIN
단순히 방법은 아직 PtA
에 존재하지 않는 모든 PtC
데이터를 유지하면서 그 결과 테이블은 모든 데이터를 포함하고 같이가?
편집 : 다음은 상황/결과가 어떻게 보이는지에 대한 도표입니다.
UNION ALL Result
DepartmentName MonthNumber CallType PtAMedian PtCMedian
Place 1 2 Type 1 8 NULL
Place 2 2 Type 2 NULL 9
Place 1 2 Type 1 NULL 54
Ideal Outcome
DepartmentName MonthNumber CallType PtAMedian PtCMedian
Place 1 2 Type 1 8 54
Place 2 2 Type 2 NULL 9
------
PtA (in this case)
DepartmentName MonthNumber CallType PtAMedian PtCMedian
Place 1 2 Type 1 8 NULL
PtC (in this case)
DepartmentName MonthNumber CallType PtAMedian PtCMedian
Place 2 2 Type 2 NULL 9
Place 1 2 Type 1 NULL 54
UNION ALL
층 실제로 중앙값을 산출하는 SELECT
문장을 갖는다. 여기에 문장은 :
SELECT
DepartmentName,
MonthNumber,
CallType,
CONVERT(DECIMAL(10,2), SUM(PtA)/CONVERT(DECIMAL(10,2), COUNT(PtA))) AS PtAMedian,
NULL AS PtCMedian
FROM
rawDataPtA
WHERE
RowNumberASC IN (RowNumberDESC, RowNumberDESC - 1, RowNumberDESC + 1)
GROUP BY DepartmentName, MonthNumber, CallType
UNION ALL
SELECT
DepartmentName,
MonthNumber,
CallType,
NULL AS PtAMedian,
CONVERT(DECIMAL(10,2), SUM(PtC)/CONVERT(DECIMAL(10,2), COUNT(PtC))) AS PtCMedian
FROM
rawDataPtC
WHERE
RowNumberASC IN (RowNumberDESC, RowNumberDESC - 1, RowNumberDESC + 1)
GROUP BY DepartmentName, MonthNumber, CallType
EDIT : rawDataPtC
는 수정없이 동일한 테이블 동안 PtC
될 수 없기 rawDataPtA
는, 제거 NULL
값 데이터의 모든 행을 모두 갖는 테이블 NULL
.
편집 : 왼쪽 PtaA보기에 PTAC에서 가입,
WITH rawDataPtA AS (
SELECT
DepartmentName,
MonthNumber,
CallType,
ROW_NUMBER() OVER(PARTITION BY DepartmentName, MonthNumber, CallType ORDER BY PtA ASC) AS RowNumberASC,
ROW_NUMBER() OVER(PARTITION BY DepartmentName, MonthNumber, CallType ORDER BY PtA DESC) AS RowNumberDESC,
PtA
FROM
rawExract
WHERE
PtA IS NOT NULL
), rawDataPtC AS (
SELECT
DepartmentName,
MonthNumber,
CallType,
ROW_NUMBER() OVER(PARTITION BY DepartmentName, MonthNumber, CallType ORDER BY PtC ASC) AS RowNumberASC,
ROW_NUMBER() OVER(PARTITION BY DepartmentName, MonthNumber, CallType ORDER BY PtC DESC) AS RowNumberDESC,
PtC
FROM
rawExract
)
설명하는 사례와 관련된 몇 가지 샘플 데이터를 제공해 줄 수 있습니까? 또한 우리는 당신의 테이블 구조를 알지 못하고 많은 일을하지 않습니다. –