SQL Query从4个表中获取数据 - 到CAST和SUM

时间:2017-11-13 04:23:41

标签: sql sql-server vb.net dynamic-sql

我遇到了一个旧查询

此查询返回清单

中所有项目的清算股票价值

原始场景表:

T1:DETAIL_PURCHASE

T2:PURCHASE_REPORT

T3:DETAIL_SALE

T4:SALE_REPORT

DETAIL_PURCHASE 有列 ITEMID,QTYSOLD,BILLNO

PURCHASE_REPORT 有列 BILLNO,BILLDATE

DETAIL_SALE 有专栏,QTYSOLD,BILLNO

SALE_REPORT BILLNO,BILLDATE

我正在寻找的查询是将每个单独项目DIFFERENCE的DETAIL_PURCHASE中的所有数量与每个单独项目的DETAIL_SALE中的所有数量相加,并使用SALE_REPORT&中的日期进行日期过滤查询。 PURCHASE_REPORT。

SELECT
  dp.ITEMNAME,
  SUM(CAST(dp.QUANTITY AS numeric(18, 2))) - SUM(CAST(ds.QTY AS numeric(18, 2))) AS [ClosingStock]
FROM detailpurchases AS dp
JOIN purchasereport AS pr
  ON dp.BARCODE = pr.voucherno
JOIN detailsale AS ds
  ON ds.ITEMN = dp.ITEMN
JOIN salesreport AS sr
  ON ds.BARCODE = sr.voucherno
WHERE ds.T = 'R'
AND pr.voucherdate BETWEEN '" & DATE1.Text & "' AND '" & DATE2.Text & "'
AND sr.voucherdate BETWEEN '" & DATE1.Text & "' AND '" & DATE2.Text & "'
GROUP BY dp.ITEMNAME;

我解决了上面的查询,但它仍然返回错误的值。更有可能的是价值远高于所需的价值。

示例表:

DETAILPURCHASE:

ID  SN  ITEMN   BARCODE ITEMNAME    HSN T   CP  BID BATCHN  QUANTITY
282 1   106 0009    5STAR 10.1G 5/- 18063100    0   230.11011           90.0
330 2   106 0014    5STAR 10.1G 5/- 18063100    0   3.979876543         4860.0
332 2   106 0015    5STAR 10.1G 5/- 18063100    0   3.8397736           4860.0
385 3   106 0021    5STAR 10.1G 5/- 18063100    0   210.73944           144.0
446 1   106 0025    5STAR 10.1G 5/- 18063100    0   230.1099            108.0
545 6   106 0034    5STAR 10.1G 5/- 18063100    0   225.34766   1       90.0
598 1   106 0039    5STAR 10.1G 5/- 18063100    0   230.109944          180.0
671 1   106 0044    5STAR 10.1G 5/- 18063100    1   222.80137   54  832 270.0
814 1   106 0070    5STAR 10.1G 5/- 18063100    1   222.80  369 906 108.0

DETAILSALE:

ID  SN  ITEMN   BARCODE ITEMNAME    HSN T   CP  BIID    BATCHN  QTY
59  12  106 0214    5STAR 10.1G 5/- 18063100    R   222.8   54  832 2.0
94  7   106 0218    5STAR 10.1G 5/- 18063100    R   222.8   54  832 18.0
111 8   106 0220    5STAR 10.1G 5/- 18063100    R   222.8   54  832 5.0
163 1   106 0225    5STAR 10.1G 5/- 18063100    R   222.8   54  832 1.0
189 17  106 0227    5STAR 10.1G 5/- 18063100    R   222.8   54  832 1.0
257 13  106 0231    5STAR 10.1G 5/- 18063100    R   222.8   54  832 5.0
303 12  106 0232    5STAR 10.1G 5/- 18063100    R   222.8   54  832 4.0
359 22  106 0235    5STAR 10.1G 5/- 18063100    R   222.8   54  832 5.0
379 14  106 0236    5STAR 10.1G 5/- 18063100    R   222.8   54  832 2.0
497 1   106 0293    5STAR 10.1G 5/- 18063100    R   222.8   369 906 2.0
516 1   106 0291    5STAR 10.1G 5/- 18063100    R   222.8   369 906 18.0

PURCHASEREPORT:

ID  VOUCHERTYPE VOUCHERDATE        VOUCHERNO     PARTY
15  Purchase    2017-07-21 00:00:00.000 0006    VINAYAKA CORPORATION
16  Purchase    2017-07-14 00:00:00.000 0002    SAI MAHESWARA AGENCIES
17  Purchase    2017-07-11 00:00:00.000 0001    SATHYA TRADING CO
18  Purchase    2017-07-15 00:00:00.000 0003    CHELLU ENTERPRISES
19  Purchase    2017-07-15 00:00:00.000 0004    RITHESH TRADERS
20  Purchase    2017-07-16 00:00:00.000 0005    CHELLU ENTERPRISES
21  Purchase    2017-07-21 00:00:00.000 0006    SRI PRAMEELA MARKETINGS
22  Purchase    2017-07-22 00:00:00.000 0007    RITHESH TRADERS
24  Purchase    2017-07-24 00:00:00.000 0008    SATHYA TRADING CO
25  Purchase    2017-07-29 00:00:00.000 0009    CHELLU ENTERPRISES
26  Purchase    2017-07-31 00:00:00.000 0010    CHELLU ENTERPRISES
27  Purchase    2017-07-31 00:00:00.000 0011    RITHESH TRADERS
30  Purchase    2017-07-31 00:00:00.000 0012    SAI MAHESWARA AGENCIES
31  Purchase    2017-08-09 00:00:00.000 0013    CHELLU ENTERPRISES
32  Purchase    2017-08-09 00:00:00.000 0014    CHELLU ENTERPRISES
33  Purchase    2017-08-09 00:00:00.000 0015    CHELLU ENTERPRISES
34  Purchase    2017-08-09 00:00:00.000 0016    CHELLU ENTERPRISES
35  Purchase    2017-08-08 00:00:00.000 0017    SATHYA TRADING CO
36  Purchase    2017-08-12 00:00:00.000 0018    SRI PRAMEELA MARKETINGS
37  Purchase    2017-08-14 00:00:00.000 0019    RITHESH TRADERS
38  Purchase    2017-08-15 00:00:00.000 0020    CHELLU ENTERPRISES
39  Purchase    2017-08-17 00:00:00.000 0021    CHELLU ENTERPRISES
40  Purchase    2017-08-17 00:00:00.000 0022    SATHYA TRADING CO
41  Purchase    2017-08-21 00:00:00.000 0023    CHELLU ENTERPRISES
42  Purchase    2017-08-28 00:00:00.000 0024    SATHYA TRADING CO
43  Purchase    2017-08-29 00:00:00.000 0025    CHELLU ENTERPRISES
45  Purchase    2017-08-31 00:00:00.000 0027    SAI MAHESWARA AGENCIES
46  Purchase    2017-08-31 00:00:00.000 0028    SRI VINAYAKA AGENCIES 
47  Purchase    2017-08-31 00:00:00.000 0026    RITHESH TRADERS
48  Purchase    2017-09-11 00:00:00.000 0027    SATHYA TRADING CO
49  Purchase    2017-09-14 00:00:00.000 0028    RITHESH TRADERS
50  Purchase    2017-09-15 00:00:00.000 0029    RITHESH TRADERS
51  Purchase    2017-09-06 00:00:00.000 0030    SRI PRAMEELA MARKETINGS
52  Purchase    2017-09-08 00:00:00.000 0031    MOKSHITHA ENTERPRISES
53  Purchase    2017-09-09 00:00:00.000 0032    SAI MAHESWARA AGENCIES
54  Purchase    2017-09-09 00:00:00.000 0033    SRI VINAYAKA AGENCIES 
55  Purchase    2017-09-15 00:00:00.000 0034    CHELLU ENTERPRISES
56  Purchase    2017-09-15 00:00:00.000 0035    CHELLU ENTERPRISES
58  Purchase    2017-09-29 00:00:00.000 0036    SATHYA TRADING CO
59  Purchase    2017-09-22 00:00:00.000 0037    CHELLU ENTERPRISES
60  Purchase    2017-09-22 00:00:00.000 0038    RITHESH TRADERS
61  Purchase    2017-09-28 00:00:00.000 0039    CHELLU ENTERPRISES
62  Purchase    2017-09-28 00:00:00.000 0040    RITHESH TRADERS
63  Purchase    2017-09-28 00:00:00.000 0041    RITHESH TRADERS
64  Purchase    2017-09-29 00:00:00.000 0042    SATHYA TRADING CO
65  Purchase    2017-10-09 00:00:00.000 0043    SRI VINAYAKA AGENCIES 
66  Purchase    2017-10-10 00:00:00.000 0044    CHELLU ENTERPRISES
67  Purchase    2017-10-11 00:00:00.000 0045    MOKSHITHA ENTERPRISES
68  Purchase    2017-10-14 00:00:00.000 0046    SATHYA TRADING CO
69  Purchase    2017-10-14 00:00:00.000 0047    RITHESH TRADERS
72  Purchase    2017-10-23 00:00:00.000 0048    CHELLU ENTERPRISES
73  Purchase    2017-10-23 00:00:00.000 0049    CHELLU ENTERPRISES
74  Purchase    2017-10-23 00:00:00.000 0050    CHELLU ENTERPRISES

SALEREPORT

ID  VOUCHERTYPE VOUCHERDATE     VOUCHERNO   PARTY
4   Sale    2017-10-02 00:00:00.000 0212    SAI MEDICALS
6   HOLD    2017-10-03 00:00:00.000 0214    VAMSI KRISHNA SUPER BAZAAR
7   Sale    2017-10-03 00:00:00.000 0215    ADS SUPER BAZAAR
9   Sale    2017-10-04 00:00:00.000 0217    SRI BALAJI GENARAL STORES
10  Sale    2017-10-04 00:00:00.000 0218    NEW SS BEKERY
11  Sale    2017-10-04 00:00:00.000 0219    KANYAKA PARAMESWARI STORES
12  Sale    2017-10-05 00:00:00.000 0220    VASAVI STORES
13  Sale    2017-10-05 00:00:00.000 0221    NAVEEN
14  Sale    2017-10-05 00:00:00.000 0222    SRI HARI MEDICALS
15  Sale    2017-10-05 00:00:00.000 0223    JAKKAM SHOPPING CORNER
16  Sale    2017-10-05 00:00:00.000 0224    C NARESH
19  Sale    2017-10-05 00:00:00.000 0225    K R C SONS STORES
20  Sale    2017-10-05 00:00:00.000 0226    SREEDHAR TRADERS
21  Sale    2017-10-06 00:00:00.000 0227    B V SHANMUGAM
22  Sale    2017-10-06 00:00:00.000 0228    NEW VENKATESWARA SWEETS
23  Sale    2017-10-07 00:00:00.000 0229    VIJAYA MEDICAL&GENARAL STORES
24  Sale    2017-10-07 00:00:00.000 0230    LANCHIPALLI MALLAINAIDU
25  Sale    2017-10-07 00:00:00.000 0231    NEW VENKATADRI SWEETS&COOL DRINKS
27  Sale    2017-10-08 00:00:00.000 0232    LANCHIPALLI MALLAINAIDU
28  Sale    2017-10-08 00:00:00.000 0233    J.BALASUBRAMANYAM
29  Sale    2017-10-08 00:00:00.000 0234    RAJESWARI GENARAL STORES
30  Sale    2017-10-08 00:00:00.000 0235    M/S SRI SAI PROVISINAL&DIGNITY STORES 
31  Sale    2017-10-08 00:00:00.000 0236    B V SUBRAMANYAM
32  Sale    2017-10-09 00:00:00.000 0237    K. MADHUSUDAHANA,KUPPAM
33  Sale    2017-10-09 00:00:00.000 0238    JK SUPER BAZAAR
34  Sale    2017-10-09 00:00:00.000 0239    NEW LAKSHMI PROVISION STORES
35  Sale    2017-10-03 00:00:00.000 0213    RAJU 
36  Sale    2017-10-04 00:00:00.000 0216    BALAJI
42  Sale    2017-11-03 00:00:00.000 0293    LAKSHMI SUPER BAZAAR
43  Sale    2017-11-03 00:00:00.000 0292    SREEDHAR TRADERS
44  Sale    2017-11-02 00:00:00.000 0291    M/S R S PANDURANGA GENARAL MARCHANT
45  Sale    2017-11-02 00:00:00.000 0290    SREEDHAR TRADERS
47  Sale    2017-11-04 00:00:00.000 0294    SRI MURUGAN AGENCY&GENARAL STORES
49  Sale    2017-11-04 00:00:00.000 0295    SRI HARI MEDICALS
50  Sale    2017-11-05 00:00:00.000 0296    M/S SRI SAI PROVISINAL&DIGNITY STORES 
52  Sale    2017-11-05 00:00:00.000 0297    LAKSHMI SUPER BAZAAR
53  Sale    2017-11-05 00:00:00.000 0298    VAMSI KRISHNA SUPER BAZAAR
54  Sale    2017-10-02 00:00:00.000 0210    KA SUPER BAZAAR
55  Sale    2017-10-02 00:00:00.000 0211    SRI MURUGAN AGENCY&GENARAL STORES

我尝试运行查询:

    select 
        dp.ITEMNAME,dp.BARCODE, 
        (CAST(dp.QUANTITY AS numeric(18,2))) , 
        ds.BARCODE,
        (CAST(ds.QTY AS numeric(18,2))) as [ClosingStock] 
    from [iBillDB].[dbo].detailpurchases as dp 
    join [iBillDB].[dbo].purchasereport as pr on dp.BARCODE=pr.voucherno 
    join [iBillDB].[dbo].detailsale as ds on ds.ITEMN=dp.ITEMN 
    join [iBillDB].[dbo].salesreport as sr on ds.BARCODE=sr.voucherno 
    where ds.T='R' 
    and dp.ITEMN='106' 
    group by dp.ITEMNAME,dp.QUANTITY,ds.QTY,dp.BARCODE,ds.BARCODE;

我得到的结果如下:

ITEMNAME        BARCODE cs      BARCODE ClosingStock
5STAR 10.1G 5/- 0025    108.00  0225    1.00
5STAR 10.1G 5/- 0025    108.00  0227    1.00
5STAR 10.1G 5/- 0070    108.00  0225    1.00
5STAR 10.1G 5/- 0070    108.00  0227    1.00
5STAR 10.1G 5/- 0025    108.00  0218    18.00
5STAR 10.1G 5/- 0025    108.00  0291    18.00
5STAR 10.1G 5/- 0070    108.00  0218    18.00
5STAR 10.1G 5/- 0070    108.00  0291    18.00
5STAR 10.1G 5/- 0025    108.00  0214    2.00
5STAR 10.1G 5/- 0025    108.00  0236    2.00
5STAR 10.1G 5/- 0025    108.00  0293    2.00
5STAR 10.1G 5/- 0070    108.00  0214    2.00
5STAR 10.1G 5/- 0070    108.00  0236    2.00
5STAR 10.1G 5/- 0070    108.00  0293    2.00
5STAR 10.1G 5/- 0025    108.00  0232    4.00
5STAR 10.1G 5/- 0070    108.00  0232    4.00
5STAR 10.1G 5/- 0025    108.00  0220    5.00
5STAR 10.1G 5/- 0025    108.00  0231    5.00
5STAR 10.1G 5/- 0025    108.00  0235    5.00
5STAR 10.1G 5/- 0070    108.00  0220    5.00
5STAR 10.1G 5/- 0070    108.00  0231    5.00
5STAR 10.1G 5/- 0070    108.00  0235    5.00
5STAR 10.1G 5/- 0021    144.00  0225    1.00
5STAR 10.1G 5/- 0021    144.00  0227    1.00
5STAR 10.1G 5/- 0021    144.00  0218    18.00
5STAR 10.1G 5/- 0021    144.00  0291    18.00
5STAR 10.1G 5/- 0021    144.00  0214    2.00
5STAR 10.1G 5/- 0021    144.00  0236    2.00
5STAR 10.1G 5/- 0021    144.00  0293    2.00
5STAR 10.1G 5/- 0021    144.00  0232    4.00
5STAR 10.1G 5/- 0021    144.00  0220    5.00
5STAR 10.1G 5/- 0021    144.00  0231    5.00
5STAR 10.1G 5/- 0021    144.00  0235    5.00
5STAR 10.1G 5/- 0039    180.00  0225    1.00
5STAR 10.1G 5/- 0039    180.00  0227    1.00
5STAR 10.1G 5/- 0039    180.00  0218    18.00
5STAR 10.1G 5/- 0039    180.00  0291    18.00
5STAR 10.1G 5/- 0039    180.00  0214    2.00
5STAR 10.1G 5/- 0039    180.00  0236    2.00
5STAR 10.1G 5/- 0039    180.00  0293    2.00
5STAR 10.1G 5/- 0039    180.00  0232    4.00
5STAR 10.1G 5/- 0039    180.00  0220    5.00
5STAR 10.1G 5/- 0039    180.00  0231    5.00
5STAR 10.1G 5/- 0039    180.00  0235    5.00
5STAR 10.1G 5/- 0044    270.00  0225    1.00
5STAR 10.1G 5/- 0044    270.00  0227    1.00
5STAR 10.1G 5/- 0044    270.00  0218    18.00
5STAR 10.1G 5/- 0044    270.00  0291    18.00
5STAR 10.1G 5/- 0044    270.00  0214    2.00
5STAR 10.1G 5/- 0044    270.00  0236    2.00
5STAR 10.1G 5/- 0044    270.00  0293    2.00
5STAR 10.1G 5/- 0044    270.00  0232    4.00
5STAR 10.1G 5/- 0044    270.00  0220    5.00
5STAR 10.1G 5/- 0044    270.00  0231    5.00
5STAR 10.1G 5/- 0044    270.00  0235    5.00
5STAR 10.1G 5/- 0014    4860.00 0225    1.00
5STAR 10.1G 5/- 0014    4860.00 0227    1.00
5STAR 10.1G 5/- 0015    4860.00 0225    1.00
5STAR 10.1G 5/- 0015    4860.00 0227    1.00
5STAR 10.1G 5/- 0014    4860.00 0218    18.00
5STAR 10.1G 5/- 0014    4860.00 0291    18.00
5STAR 10.1G 5/- 0015    4860.00 0218    18.00
5STAR 10.1G 5/- 0015    4860.00 0291    18.00
5STAR 10.1G 5/- 0014    4860.00 0214    2.00
5STAR 10.1G 5/- 0014    4860.00 0236    2.00
5STAR 10.1G 5/- 0014    4860.00 0293    2.00
5STAR 10.1G 5/- 0015    4860.00 0214    2.00
5STAR 10.1G 5/- 0015    4860.00 0236    2.00
5STAR 10.1G 5/- 0015    4860.00 0293    2.00
5STAR 10.1G 5/- 0014    4860.00 0232    4.00
5STAR 10.1G 5/- 0015    4860.00 0232    4.00
5STAR 10.1G 5/- 0014    4860.00 0220    5.00
5STAR 10.1G 5/- 0014    4860.00 0231    5.00
5STAR 10.1G 5/- 0014    4860.00 0235    5.00
5STAR 10.1G 5/- 0015    4860.00 0220    5.00
5STAR 10.1G 5/- 0015    4860.00 0231    5.00
5STAR 10.1G 5/- 0015    4860.00 0235    5.00
5STAR 10.1G 5/- 0009    90.00   0225    1.00
5STAR 10.1G 5/- 0009    90.00   0227    1.00
5STAR 10.1G 5/- 0034    90.00   0225    1.00
5STAR 10.1G 5/- 0034    90.00   0227    1.00
5STAR 10.1G 5/- 0009    90.00   0218    18.00
5STAR 10.1G 5/- 0009    90.00   0291    18.00
5STAR 10.1G 5/- 0034    90.00   0218    18.00
5STAR 10.1G 5/- 0034    90.00   0291    18.00
5STAR 10.1G 5/- 0009    90.00   0214    2.00
5STAR 10.1G 5/- 0009    90.00   0236    2.00
5STAR 10.1G 5/- 0009    90.00   0293    2.00
5STAR 10.1G 5/- 0034    90.00   0214    2.00
5STAR 10.1G 5/- 0034    90.00   0236    2.00
5STAR 10.1G 5/- 0034    90.00   0293    2.00
5STAR 10.1G 5/- 0009    90.00   0232    4.00
5STAR 10.1G 5/- 0034    90.00   0232    4.00
5STAR 10.1G 5/- 0009    90.00   0220    5.00
5STAR 10.1G 5/- 0009    90.00   0231    5.00
5STAR 10.1G 5/- 0009    90.00   0235    5.00
5STAR 10.1G 5/- 0034    90.00   0220    5.00
5STAR 10.1G 5/- 0034    90.00   0231    5.00
5STAR 10.1G 5/- 0034    90.00   0235    5.00

在上面的结果中第二列是BillNo of Purchases,第三列是QTY购买的 第四栏是BillNo of Sales,第五栏是QTY出售

我的评估在这里,而总结值重复两次。

预期结果是: 10647

实际结果是: 117243

1 个答案:

答案 0 :(得分:1)

您通过加入不相关的记录来增加值。 (您将每个购买明细记录与项目中的每个销售明细记录组合在一起。)您希望将购买金额与销售额相加,因此首先汇总,然后加入:

select 
  coaleasce(p.itemname, s.itemname) as itemname,
  coaleasce(p.sum_qty, 0) - coaleasce(s.sum_qty, 0) as closing_stock
from
(
  select
    itemname,
    sum(cast(quantity as numeric(18, 2))) as sum_qty
  from detailpurchases
  where barcode in (select voucherno from purchasereport where voucherdate between ? and ?)
  group by itemname
) p
full outer join
(
  select
    itemname,
    sum(cast(qty as numeric(18, 2))) as sum_qty
  from detailsale
  where barcode in (select voucherno from salesreport where voucherdate between ? and ?)
  and T = 'R'
  group by itemname
) s on s.itemname = p.itemname;