내 SQL 쿼리의 항목이 결과 값을 두 배로 늘립니다.

에이 마즈 모랄레스

3 개의 테이블 (Transaction, TransactionEntry 및 TenderEntry)이 있습니다. SQL 쿼리를 실행할 때 TransactionEntry Table 때문에 합계 값을 두 번 얻었습니다.

그래서 제가 2 개의 아이템을 가지고 있다고합시다 (옷은 $ 288.75, 무료 우산은 $ 50.00). $ 300 상당의 현금과 $ 100 상당의 GC를 사용하여 지불을 정산했습니다. 이제 $ 61.25 상당의 현금 변경이 있습니다.

다음은 3 개의 테이블에있는 항목입니다.

거래 테이블

TransactionNumber|Total|
========================
1                |338.75|

TransactionEntry 테이블

TransactionNumber|ItemID|Price|
===============================
1                |245648|288.75|
1                |129   |50.00 |

입찰 입장 테이블

TransactionNumber|TenderID|Description|Amount|
==============================================
1                |1       |Cash       |300.00| 
1                |1       |Cash       |-61.25|
1                |20      |GC         |100.00|

지금까지 제가 만든 것입니다

select [Transaction].TransactionNumber,
       (case when [Transaction].RecallType = 0 then [Transaction].total else 0 end) as Sales,
       sum(case when TransactionEntry.ItemID = 6922 then TransactionEntry.Price
        when TransactionEntry.price = 0 then TransactionEntry.price else 0 end) as Free,
       sum(case when TenderEntry.tenderID = 1 then TenderEntry.Amount else 0 end) as Cash,
       sum(case when TenderEntry.tenderID = 20 then TenderEntry.Amount else 0 end) as GC
 from  [Transaction] inner join 
       TransactionEntry on [Transaction].transactionnumber = TransactionEntry.transactionnumber inner join 
       TenderEntry on [Transaction].transactionnumber = TenderEntry.transactionnumber
 group by [Transaction].TransactionNumber,
          (case when [Transaction].RecallType = 0 then [Transaction].total else 0 end)

이런 종류의 출력을 얻습니다.

TransactionNumber|Sales |Free  |Cash   |GC   |
==============================================
1                |338.75|150.00|477.50|200.00|

이 대신

TransactionNumber|Sales |Free |Cash   |GC    |
==============================================
1                |338.75|50.00|238.75 |100.00|
user9601310

트랜잭션 당 하나의 행을 원하므로 다음과 같이 조인을 수행하기 전에 조인 된 테이블을 트랜잭션 수준으로 합산하는 것이 좋습니다.

select t1.TransactionNumber,
       case when t1.RecallType = 0 then t1.total else 0 end as Sales,
       t2.Free,
       t3.Cash,
       t3.GC
from [Transaction] t1
inner join (select transactionnumber, 
            sum(case when ItemID = 6922 then Price else 0 end) as free 
            from TransactionEntry 
            group by transactionnumber) as t2 
            on t1.transactionnumber = t2.transactionnumber
inner join (select transactionnumber, 
            sum(case when tenderID = 1 then Amount else 0 end) as Cash,
            sum(case when tenderID = 20 then Amount else 0 end) as GC
            from TenderEntry
            group by transactionnumber) as t3
            on t1.transactionnumber = t3.transactionnumber

테이블 별칭 (t1, t2, t3)을 사용하여 코드를 압축하고 좀 더 쉽게 읽을 수 있도록했습니다. "트랜잭션"이 예약어 인 것처럼 보이므로 참조 할 때 항상 대괄호를 사용하여 이름을 묶어야하므로 테이블 이름을 선택하는 것이 좋지 않을 수 있습니다.

이 코드에 문제가있는 것 같습니다.

sum(case when TransactionEntry.ItemID = 6922 then TransactionEntry.Price  
when TransactionEntry.price = 0 then TransactionEntry.price else 0 end) as Free,

무료라고 말하는 우산은 6922가 아니라 129 항목이기 때문입니다. 또한 "TransactionEntry.price = 0 then ..."은 가격에 관계없이 가격을 0으로 설정합니다. 당신이 거기서 무엇을 의도했는지 잘 모르겠습니까?

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

서로 다른 두 쿼리 결과의 차이 값을 가져 오는 쿼리

분류에서Dev

하나의 쿼리로 동일한 항목의 두 배열을 업데이트 할 수 있습니까?

분류에서Dev

하위 쿼리의 SQL AVG-결과는 "하위 쿼리가 둘 이상의 값을 반환했습니다 .."

분류에서Dev

getValueAt ()이 데이터베이스로 항목을 두 배로 늘 렸습니다.

분류에서Dev

어떻게 링크 테이블에 내 SQL 쿼리의 정확한 결과를 얻을 수 있습니다

분류에서Dev

내 linq에서 SQL 쿼리로 두 개의 열 값을 선택하는 방법은 무엇입니까?

분류에서Dev

첫 번째 선택 쿼리 결과를 기반으로 두 개의 다른 선택 쿼리 결과 (Oracle)에서 하나의 값을 선택합니다.

분류에서Dev

Oracle의 XML 데이터 파일로 SQL 쿼리 결과 내보내기

분류에서Dev

두 열을 다른 테이블의 한 열과 비교하는 SQL 쿼리 (및 두 값 가져 오기)

분류에서Dev

SQL 쿼리 : 테이블을 통과하고 특정 항목을 COUNT 개하고 해당 결과를 나머지 쿼리의 열 이름으로 사용해야합니다.

분류에서Dev

저장 프로 시저를 사용하여 쿼리 결과를 얻는 방법 (한 테이블의 항목 수량을 두 번째 테이블에 정의 된 내 단위로 변환)

분류에서Dev

for 루프에서 값을 두 배로 늘리려면 constexpr이 필요합니다.

분류에서Dev

결과 행을 결합하지 않고 MySQL의 두 SQL 쿼리를 다른 열과 결합하는 방법

분류에서Dev

두 쿼리의 결과에서 하나의 레코드로 0 또는 1을 반환하는 SQL 쿼리

분류에서Dev

SQL 쿼리는 두 행을 하나의 데이터 행으로 결합합니다.

분류에서Dev

배열의 값을 포함하는 SQL 쿼리 결과

분류에서Dev

Oracle SQL의 첫 번째 쿼리 결과를 기반으로 한 두 번째 쿼리의 UNION 테이블

분류에서Dev

내 VBA PasteSpecial, Operation : = xlAdd가 셀 값을 두 배로 늘리는 이유는 무엇입니까?

분류에서Dev

두 SQL 쿼리 결과의 합과 차이

분류에서Dev

두 테이블의 결과를 결합하는 SQL 쿼리

분류에서Dev

SQL 쿼리 두 항목이 같으면 세 테이블에서 네 항목을 선택합니다.

분류에서Dev

데이터 프레임의 배열을 모두 같은 크기로 늘립니다.

분류에서Dev

SQL 병합 두 개의 선택 쿼리 결과, 한 열의 값에 충돌이있는 경우 쿼리 A의 결과 유지

분류에서Dev

SQL-다른 쿼리의 결과를 기반으로 조인 / 쿼리를 만듭니다. 조인 테이블은 다른 쿼리의 결과입니다.

분류에서Dev

값 속성 내부의 "<", ">"항목을 모두 바꿉니다.

분류에서Dev

MS Access SQL 쿼리-두 쿼리의 통합에서 숫자 값 결과 빼기

분류에서Dev

Google Play 서비스와 AdMob은 내 앱의 메모리를 두 배로 늘립니다.

분류에서Dev

SQL 두 테이블에서 특정 값을 얻고 결과 집합을 여러 행으로 만듭니다.

분류에서Dev

결과가 없으면 SQL 쿼리에 항목을 만듭니다.

Related 관련 기사

  1. 1

    서로 다른 두 쿼리 결과의 차이 값을 가져 오는 쿼리

  2. 2

    하나의 쿼리로 동일한 항목의 두 배열을 업데이트 할 수 있습니까?

  3. 3

    하위 쿼리의 SQL AVG-결과는 "하위 쿼리가 둘 이상의 값을 반환했습니다 .."

  4. 4

    getValueAt ()이 데이터베이스로 항목을 두 배로 늘 렸습니다.

  5. 5

    어떻게 링크 테이블에 내 SQL 쿼리의 정확한 결과를 얻을 수 있습니다

  6. 6

    내 linq에서 SQL 쿼리로 두 개의 열 값을 선택하는 방법은 무엇입니까?

  7. 7

    첫 번째 선택 쿼리 결과를 기반으로 두 개의 다른 선택 쿼리 결과 (Oracle)에서 하나의 값을 선택합니다.

  8. 8

    Oracle의 XML 데이터 파일로 SQL 쿼리 결과 내보내기

  9. 9

    두 열을 다른 테이블의 한 열과 비교하는 SQL 쿼리 (및 두 값 가져 오기)

  10. 10

    SQL 쿼리 : 테이블을 통과하고 특정 항목을 COUNT 개하고 해당 결과를 나머지 쿼리의 열 이름으로 사용해야합니다.

  11. 11

    저장 프로 시저를 사용하여 쿼리 결과를 얻는 방법 (한 테이블의 항목 수량을 두 번째 테이블에 정의 된 내 단위로 변환)

  12. 12

    for 루프에서 값을 두 배로 늘리려면 constexpr이 필요합니다.

  13. 13

    결과 행을 결합하지 않고 MySQL의 두 SQL 쿼리를 다른 열과 결합하는 방법

  14. 14

    두 쿼리의 결과에서 하나의 레코드로 0 또는 1을 반환하는 SQL 쿼리

  15. 15

    SQL 쿼리는 두 행을 하나의 데이터 행으로 결합합니다.

  16. 16

    배열의 값을 포함하는 SQL 쿼리 결과

  17. 17

    Oracle SQL의 첫 번째 쿼리 결과를 기반으로 한 두 번째 쿼리의 UNION 테이블

  18. 18

    내 VBA PasteSpecial, Operation : = xlAdd가 셀 값을 두 배로 늘리는 이유는 무엇입니까?

  19. 19

    두 SQL 쿼리 결과의 합과 차이

  20. 20

    두 테이블의 결과를 결합하는 SQL 쿼리

  21. 21

    SQL 쿼리 두 항목이 같으면 세 테이블에서 네 항목을 선택합니다.

  22. 22

    데이터 프레임의 배열을 모두 같은 크기로 늘립니다.

  23. 23

    SQL 병합 두 개의 선택 쿼리 결과, 한 열의 값에 충돌이있는 경우 쿼리 A의 결과 유지

  24. 24

    SQL-다른 쿼리의 결과를 기반으로 조인 / 쿼리를 만듭니다. 조인 테이블은 다른 쿼리의 결과입니다.

  25. 25

    값 속성 내부의 "<", ">"항목을 모두 바꿉니다.

  26. 26

    MS Access SQL 쿼리-두 쿼리의 통합에서 숫자 값 결과 빼기

  27. 27

    Google Play 서비스와 AdMob은 내 앱의 메모리를 두 배로 늘립니다.

  28. 28

    SQL 두 테이블에서 특정 값을 얻고 결과 집합을 여러 행으로 만듭니다.

  29. 29

    결과가 없으면 SQL 쿼리에 항목을 만듭니다.

뜨겁다태그

보관