필자는 이해할 수있는 최신 인보이스 날짜와 해당 인보이스 일자의 년과 월 조합을 얻으려고하는 SQL보기를 가지고 있습니다. 그런 다음이 값을 사용하여 해당 월의 수량을 계산합니다.다른 사람의 SQL 코드 (날짜 + 년 (날짜)) 다른 사람의 코드
내 SQL에 대한 지식은 기본이며 사람이이 부분 할 이유를 잘 모르겠어요 :
이MAX(CONVERT(varchar(3), InvoiceDate, 101) + CONVERT(varchar(4),
YEAR(InvoiceDate))) AS YearMonth
등 TOP (100) PERCENT 부분을 포함하여 코드의 나머지, 나는 꽤 오전 로 행복한.
문제의 부품이 실수로 작성되었거나 일부 인스턴스에서와 같이 일부 SQL 또는 비즈니스 이유가 Max Invoice Date와 완전히 다른 경우 확실하지 않습니다. 아래
전체 SQL 식 :
SELECT TOP (100) PERCENT
MAX(InvoiceDate) AS MaxInvoiceDate,
StockCode, Warehouse,
MAX(CONVERT(varchar(3), InvoiceDate, 101) + CONVERT(varchar(4), YEAR(InvoiceDate))) AS YearMonth
FROM dbo.ArTrnDetail
GROUP BY StockCode, Warehouse
HAVING (Warehouse = 'CS') OR
(Warehouse = 'PS') OR
(Warehouse = 'DS') OR
(Warehouse = 'JS') OR
(Warehouse = 'JN')
ORDER BY MaxInvoiceDate DESC
그리고 잠재적으로 문제 출력 : 흥미로운,하지만 의미가
MaxInvoiceDate | StockCode | Warehouse | YearMonth
----------------------------------------------------------------
2013-08-21 00:00:00.000 | ACH045 | PS | 12/2012
나는 왜 누군가가 최대 MM/YYYY를 원하는지 알지 못합니다. 그것은 틀린 것처럼 보이지만 어쩌면 몇 가지 이유가 있습니다. –
'InvoiceDate'가 실제'date' 나'datetime'이나'datetime2' 타입이라면'CONVERT' 대신에'DATEPART' sql 함수를 사용할 수 있습니다. 문자열로 변환하는 것은 뷰 소비자에게 편리 할 수 있지만 그 이유를 확인하려면 해당 코드를 살펴 봐야합니다. – Igor
보기에서 ORDER BY를 제거하십시오. 그것은 쓸모 없을뿐만 아니라 실제로 성능을 해칠 수 있습니다. SQL Server에서 실제로 수행해야하는 경우 순서 지정은 가장 바깥 쪽 쿼리의 일부 여야합니다. – dean