일부 판매 정보를 분석하려고하는데 SQL 쿼리를 작동시킬 수 없습니다. SQL을 올바르게 사용하는 방법을 여전히 배우고 있기 때문에 일반적인 솔루션을 보지 못했을 것입니다.월간 매출을 올리는 올바른 방법
우리 데이터베이스의 모든 기사 목록을 원하고 각각에 대한 월별 판매량을 표시하고 싶습니다. 판매하지 않은 달은 0으로 표시해야합니다.
나는 하나의 테이블에 상품 정보를 저장하고 다른 상품에는 주문 정보를, 실제 상품에는 세 번째 테이블을 저장했다.
내 문제는 이제 어떻게 든 비어있는 것 같아서 필터를 만들 수 없습니다. 또한 다른 표에 날짜를 참조하면 날짜 값이 기존 값/행에 합류하는 대신 "mulitply"(reportMonth에 매월 12 행 남음)입니다.
article_no month(beleg.orderdate) reportMonth VK_amount
Produkt_A 1 5
Produkt_A 2 9
Produkt_A 3 7
Produkt_A 4 5
Produkt_A 5 5
Produkt_A 6 7
Produkt_A 7 5
Produkt_A 8 7
Produkt_A 9 7
Produkt_A 10 6
Produkt_A 11 7
Produkt_A 12 7
Produkt_A 1 1 1
Produkt_A 4 4 1
Produkt_A 5 5 2
Produkt_A 7 7 3
Produkt_A 8 8 2
이 나는 사람이 여기에 도움이 될 아이디어가 있습니까
article_no month(beleg.orderdate) reportMonth VK_amount
Produkt_A 1 1
Produkt_A 2 0
Produkt_A 3 0
Produkt_A 4 4 1
Produkt_A 5 5 2
Produkt_A 6 0
Produkt_A 7 7 3
Produkt_A 8 8 2
Produkt_A 9 0
Produkt_A 10 10 2
Produkt_A 11 0
Produkt_A 12 0
를 필요가 무엇
//* list of months */
WITH dates(reportMonth) as (
select 1 union all select 2 union all
select 3 union all select 4 union all
select 5 union all select 6 union all
select 7 union all select 8 union all
select 9 union all select 10 union all
select 11 union all select 12
)
SELECT article.articleno AS 'article_no'
, month(beleg.orderdate)
, dates.reportMonth
, ISNULL(sum(orders_pos.amount), 0)
AS 'VK_amount'
FROM article
CROSS JOIN dates
LEFT JOIN orders_pos ON article.articleno = orders_pos.articleno
LEFT JOIN orders ON orders_pos.beleg_id = orders.id
AND ISNULL(month(orders.orderdate), 0) != 0
AND month(orders.orderdate) = dates.reportMonth
GROUP BY article.artikelnr
, month(orders.orderdate)
, dates.reportMonth
이 전류 출력은 다음과 같습니다
이
내 코드입니다 ? 사례를 이해하는 데 필요한 추가 정보가 필요하면 알려 주시기 바랍니다.
답장을 보내 주셔서 감사합니다. 'GROUP BY'에서이 예제를 함께 사용하는 것은 오타였습니다. 저는 이것을 본문에서 편집했습니다. 이 예제에서는 필요하지 않은 WHERE 문에서 특정 날짜 범위를 선택하기 때문에 연도 조건은 필요하지 않습니다. – Mirakelwhip