2017-12-12 1 views
-2

나는 거래 재고 데이터베이스가 있습니다. 그것은 판매 및 영수증을 모두 가지고 있습니다. 판매 시점의 마지막 비용으로 주식 할인을 맞추려고합니다. 나는 SQL 쿼리를 작성하는 것을 시도하고 있지만, 하위 쿼리를 수행하거나 같은 것을 보일 것이다 제대로이전 마지막 비용 찾기

데이터를 결합하는 방법을 작동하지 않을 수 있습니다

STOCKCODE DATE TYPE QTY UNIT_VALUE TOTAL_VALUE 
ABC123  01/Dec RECEIPT 10 100.00  1000.00 
ABC123  02/Dec SALES -8 120.00  960.00 
ABC123  03/Dec RECEIPT 10 110.00  1100.00 
ABC123  04/Dec SALES -12 120.00  1440.00 

그래서 순간에 마지막 비용은 $ 110.00입니다.

select t.*, oa.last_value 
from yourtable t 
outer apply (
    select top(1) unit_value as last_value 
    from yourtable y 
    where t.stockcode = y.stockcode 
    and y.type = 'RECEIPT' 
    and y.[date] < t.[date] 
    order by y.[date] DESC 
    ) oa 

나는 확실하지 않다 : 는하지만 내가 여기서 일 것이다 연산자를 적용하여 생각 나는 02 년 12 월 (인 $ 100.00)

+0

하세요 포 테이블에 대한 귀하의 스키마 정의 –

+2

귀하의 질문에 분명하지 않습니다. 당신의 논리가 무엇인지 더 잘 설명해 주시겠습니까? 또한 사용중인 데이터베이스 (예 : MySQL, SQL Server 등)에 태그를 지정하십시오. –

+0

저는 SQL Server 2012를 사용하고 있습니다. 제가하려는 것은 거꾸로 보았습니다. 제가 팔았을 때의 비용은 제가 팔 때의 비용이었습니다. 그래서 12 월 2 일에 내가 구입 한 8 대를 각각 100 달러에 팔았습니다. 그러나 주류 재고 목록에는 각 영수증과 함께 업데이트되는 최종 비용 만 있기 때문에 현재 $ 110의 가치를 표시합니다. – ChrisJ

답변

0

에 8 대를 판매 시점에서 마지막 비용을 찾으려면 [type]이이 논리에서 일부분을 연주했는지 아닌지, 나는 그것이 의심 스럽다. 참조 SQL Fiddle Demo

CREATE TABLE yourtable 
    ([STOCKCODE] varchar(6), [DATE] datetime, [TYPE] varchar(7), [QTY] int, [UNIT_VALUE] int, [TOTAL_VALUE] int) 
; 

INSERT INTO yourtable 
    ([STOCKCODE], [DATE], [TYPE], [QTY], [UNIT_VALUE], [TOTAL_VALUE]) 
VALUES 
    ('ABC123', '2001-12-01 00:00:00', 'RECEIPT', 10, 100.00, 1000.00), 
    ('ABC123', '2001-12-02 00:00:00', 'SALES', -8, 120.00, 960.00), 
    ('ABC123', '2001-12-03 00:00:00', 'RECEIPT', 10, 110.00, 1100.00), 
    ('ABC123', '2001-12-04 00:00:00', 'SALES', -12, 120.00, 1440.00) 
; 

검색어 1 :

아래() 쿼리 USG의 유착에 작은 addiion이

select t.*, coalesce(oa.last_value,unit_value) last_value 
from yourtable t 
outer apply (
    select top(1) unit_value as last_value 
    from yourtable y 
    where t.stockcode = y.stockcode 
    and y.type = 'RECEIPT' 
    and y.[date] < t.[date] 
    order by y.[date] DESC 
    ) oa 

Results :

| STOCKCODE |     DATE | TYPE | QTY | UNIT_VALUE | TOTAL_VALUE | last_value | 
|-----------|----------------------|---------|-----|------------|-------------|------------| 
| ABC123 | 2001-12-01T00:00:00Z | RECEIPT | 10 |  100 |  1000 |  100 | 
| ABC123 | 2001-12-02T00:00:00Z | SALES | -8 |  120 |   960 |  100 | 
| ABC123 | 2001-12-03T00:00:00Z | RECEIPT | 10 |  110 |  1100 |  100 | 
| ABC123 | 2001-12-04T00:00:00Z | SALES | -12 |  120 |  1440 |  110 | 
+0

"Last_Value"필드의 처음 두 줄에 NULL이 표시됩니다. – ChrisJ

+0

나에게 답변을 추가했는데 결과 테이블이 생겼다는 것을 알 수 있습니까? –

+0

NULL은 표시 할 이전 값이 없기 때문에 NULL에 "수정"을 추가했습니다. –