none
求SQL語句 RRS feed

  • 問題

  • 有下面3個表
    Invoice Sales Client
    S1908012 Ted ABCD
    Invoice SKU InvoiceQty
    S1908012 CD-F002875976 10
    S1908012 CD-F002784888 20
    S1908012 CH-126640 30
    Shelf SKU Batch ShelfQty
    01-A01 CD-F002875976 DA2 4
    01-A02 CD-F002875976 DA3 9
    01-B56 CD-F002784888 FEW1 20
    02-A01 CH-126640 ES3 15

    02-W09

    03-E02

    02-A02

    CH-126640

    CD-F002784888

    CH-126640

    QW9

    P06

    ES4

    29

    32

    9

    希望結果
    Invoice Sales Client SKU InvoiceQty Shelf ShelfQty Batch
    S1908012 Ted ABCD CD-F002875976 10 01-A01 4 DA2
    S1908012 Ted ABCD CD-F002875976 10 01-A02 6 DA3
    S1908012 Ted ABCD CD-F002784888 20 01-B56 20 FEW1
    S1908012 Ted ABCD CH-126640 30 02-A01 15 ES3
    S1908012 Ted ABCD CH-126640 30 02-A02 9 ES4


    • 已編輯 Vincent100818 2019年8月22日 上午 01:52 修改表
    2019年8月21日 上午 03:44

所有回覆

  • 看起來似乎沒有特別難?
    就透過INNER JOIN,把這三個資料表串起來

    您是否有自己寫過?
    遇到什麼問題?


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...


    2019年8月21日 上午 09:50
  •  一般會建議先找到資料表之間的關聯,就比較容易透過JOIN敘述來產生所要的結果集。


    | SQL PASS Taiwan Page | SQL PASS Taiwan Group

    | My Blog

    2019年8月22日 上午 01:23
    版主
  • 我有寫過下面的SQL,但出來的結果把第二個表與第三個表,相關的記錄全部搜索出來

    我希望得到的結果,ShelfQty按照第三個表Shelf的排序,獲取ShelfQty數量等于InvoiceQty的數量就可以

    例如:SKU:CD-F002875976  InvoiceQty:10,那么第三個表取

    Shelf SKU Batch ShelfQty
    01-A01 CD-F002875976 DA2 4
    01-A02 CD-F002875976 DA3 6


    select a.sc,a.stock,a.barcode,a.des,a.qty as tbcQty,b.shelfcode,b.qty as wmsQty,b.batchno,Substring(b.expiryDate,0,8) as expiryDate,Substring(b.createDate,0,8) as PordDate,c.clientname1,c.salesdes1,c.rem4  From sc2 as a inner join sc as c on a.sc=c.sc left join shelfcode2 as b on a.stock = b.stock  Where b.qty>0  and a.qty>0 and a.sc = 'TBC-1908063' order by a.stock,b.expiryDate

    2019年8月22日 上午 02:06
  • 謝謝你回覆,建表時,3個表都有關聯
    2019年8月22日 上午 02:08
  • 首先把您貼出的語法(一整堆)整理如下

    select a.sc,a.stock,a.barcode,a.des,a.qty as tbcQty
    	,b.shelfcode,b.qty as wmsQty,b.batchno ,Substring(b.expiryDate,0,8) as expiryDate,Substring(b.createDate,0,8) as PordDate
    	,c.clientname1,c.salesdes1,c.rem4  
    From sc2 as a 
    inner join sc as c 
    	on a.sc=c.sc 
    left join shelfcode2 as b 
    	on a.stock = b.stock  
    Where b.qty>0  
    	and a.qty>0 
    	and a.sc = 'TBC-1908063' 
    order by a.stock,b.expiryDate

    這樣看起來是否比較清楚
    但是,用的欄位名稱似乎與您#1所貼的不同?貼錯段了嗎?還是給錯欄位?

    是否請您貼出針對#1三個資料表的查詢語法
    結果,不如預期的地方

    另外,三個資料表,假設由上而下資料表名稱依序為T1,T2,T3
    那麼彼此之間欄位的關聯性,您並沒有說明
    我們也只能用猜的
    是否說明一下呢?

    這樣比較容易針對您的問題提出解決的方式

    ^.^a


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...


    2019年8月22日 上午 03:31
  • 感謝您的回覆,用excel做了表,是否容易理解一點

    T1
    Invoice Sales Client
    S1908012 Ted ABCD
    T2
    Invoice SKU InvoiceQty
    S1908012 CD-F002875976 10
    S1908012 CD-F002784888 20
    S1908012 CH-126640 30
    T3
    Shelf SKU Batch ShelfQty
    01-A01 CD-F002875976 DA2 4
    01-A02 CD-F002875976 DA3 9
    01-B56 CD-F002784888 FEW1 20
    02-A01 CH-126640 ES3 15
    02-A02 CH-126640 ES4 9
    01-C02 CD-F002875976 DW6 23
    01-D2 CD-F002784888 FE6 15
    希望得到下面結果
    Invoice Sales Client SKU InvoiceQty Shelf ShelfQty Batch
    S1908012 Ted ABCD CD-F002875976 10 01-A01 4 DA2
    S1908012 Ted ABCD CD-F002875976 10 01-A02 6 DA3
    S1908012 Ted ABCD CD-F002784888 20 01-B56 20 FEW1
    S1908012 Ted ABCD CH-126640 30 02-A01 15 ES3
    S1908012 Ted ABCD CH-126640 30 02-A02 9 ES4


    2019年8月22日 上午 04:28
  • 用我自已上面提到的SQL,他把T3表相關全部搜索出來(下面的結果),這不是期望結果

    Invoice Sales Client SKU InvoiceQty Shelf ShelfQty Batch
    S1908012 Ted ABCD CD-F002875976 10 01-A01 4 DA2
    S1908012 Ted ABCD CD-F002875976 10 01-A02 9 DA3
    S1908012 Ted ABCD CD-F002875976 10 01-A02 23 DW6
    S1908012 Ted ABCD CD-F002784888 20 01-B56 20 FEW1
    S1908012 Ted ABCD CD-F002784888 20 FE6 15 FE6
    S1908012 Ted ABCD CH-126640 30 02-A01 15 ES3
    S1908012 Ted ABCD CH-126640 30 02-A02 9 ES4

    T1的invoice字段跟T2的invoice關聯

    T2的SKU字段跟T3的SKU關聯

    表關聯性  
    T1 T2
    Invoice Invoice
       
    T2 T3
    SKU SKU

    2019年8月22日 上午 04:36
  • 依據您的期望

    >>我希望得到的結果,ShelfQty按照T3Shelf排序,獲取ShelfQty數量等于InvoiceQty的數量就可以

    這個如果用程式迴圈處理會比較容易些

    用SQL就有點傷腦筋

    目前我想到的是先把T3依據Shelf排序,對InvoiceQty做小計

    SELECT *, SUM(SelfQty) OVER(PARTITION BY SKU ORDER BY Shelf) AS ACCQTY
    FROM T3


    然後關聯後,把T2的ACCQTY<=InvoiceQty的先挑出來

    SELECT T2.Invoice, T2.SKU, T2.InvoiceQty
    	, V3.Shelf, V3.SelfQty, V3.Batch, V3.ACCQTY
    FROM T2 (NOLOCK)
    INNER JOIN (
    	SELECT *, SUM(SelfQty) OVER(PARTITION BY SKU ORDER BY Shelf) AS ACCQTY
    	FROM T3
    ) V3
    	ON T2.SKU = V3.SKU
    WHERE ACCQTY <= InvoiceQty
    ORDER BY T2.SKU, V3.Shelf


    這樣就剩下

    S1908012	CD-F002875976	10	01-A02	6	DA3

    這個沒處理到
    但是他的數量還要是10剪掉前一筆的小計4從9變成6

    我卡在這個部分


    topcat(姍舞之間的極度凝聚)
    http://www.dotblogs.com.tw/topcat
    世界上有兩樣東西分享給別人後,不但不會變少,還會變更多:
    一個是快樂,另一個是知識~ 分享...是知識累積的開始...



    2019年8月22日 上午 08:56