iT邦幫忙

0

SQL Server 選取特定資料轉出excel報表

主要目的是要定期查看某供應商所有的產品的銷售流向
請問使用什麼方式最簡便?(有參考過SSMS、SSIS、SSDT、VBA..等)
主要大概有三個資料表
客戶資料、銷貨明細、品號資料

其中會有一個條件
if(此品號(A資料表)的供應商(B資料表)為XXX) 才顯示..
但是這段在SQL語法要怎麼表達
萬分感恩

更新如下圖,希望能夠針對供應商甲,調出所有甲供應商的銷貨明細
https://ithelp.ithome.com.tw/upload/images/20190328/20116501gTHu0Cf4GR.png

froce iT邦大師 1 級 ‧ 2019-03-28 16:19:55 檢舉
沒欄位你覺得我們可以怎麼幫你寫code?
fufujane iT邦新手 5 級 ‧ 2019-03-28 17:16:27 檢舉
不好意思已更新圖片,還請幫忙看一下,謝謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
純真的人
iT邦大師 1 級 ‧ 2019-03-28 16:20:16
最佳解答

if(此品號(A資料表)的供應商(B資料表)為XXX) 才顯示

case when 此品號(A資料表)的供應商(B資料表)為XXX
then 才顯示
else ''
end

看更多先前的回應...收起先前的回應...
fufujane iT邦新手 5 級 ‧ 2019-03-28 17:21:30 檢舉

不好意思原先敘述不清楚,已新增圖片表達
case when STF.NUM == IDF.NUM , IDF.SUP == '甲'
then 才顯示
else ''
end
這樣對嗎?因為單單看條件片段好像怪怪的

在資料庫的SQL的條件會這樣

case when STF.NUM = IDF.NUM and IDF.SUP = '甲'
then 才顯示
else ''
end
CalvinKuo iT邦大師 7 級 ‧ 2019-03-28 17:57:46 檢舉
fufujane iT邦新手 5 級 ‧ 2019-03-29 16:31:29 檢舉

我使用這個語法但是跑了一整天都跑不出來...資料量數十萬筆的有沒有比較不吃資源的作法
INSERT INTO testsales(CUST_NO,DIS_SKU_NO,INV_DATE,SALES_AMT,SALES_QTY,SALES_REP) SELECT COPTG.TG004,COPTH.TH004,COPTG.TG003,COPTH.TH037-COPTH.TH047-COPTH.TH202,COPTH.TH008+COPTH.TH024,COPTG.TG006 FROM COPTG,COPTH,INVMB WHERE COPTG.TG003 BETWEEN '20190201' AND '20190305' AND COPTH.TH004 = INVMB.MB001 AND INVMB.MB032 = 'T145';

fufujane iT邦新手 5 級 ‧ 2019-03-29 16:39:29 檢舉

CalvinKuo,請問這個是不是只能夠針對一個資料表做參數的設定?因為我需要匯出的資料是2.3個資料表條件參數皆符合的值

fufujane
10萬多筆~
的確很難一下跑完呀~
不過你可以改善為left join應該會比較快點~
我查了一下你的SQL好像有個表是相乘呢

例如大都這樣

INSERT INTO testsales(CUST_NO,DIS_SKU_NO,INV_DATE,SALES_AMT,SALES_QTY,SALES_REP) 
SELECT COPTG.TG004,COPTH.TH004,COPTG.TG003,COPTH.TH037-COPTH.TH047-COPTH.TH202,COPTH.TH008+COPTH.TH024,COPTG.TG006 
FROM COPTG
left join COPTH on COPTG.主鍵 = COPTH.對應鍵(??????)
left join INVMB on COPTH.TH004 = INVMB.MB001 
WHERE COPTG.TG003 BETWEEN '20190201' AND '20190305' 
AND INVMB.MB032 = 'T145';

但你的有個表是相乘~是一堆資料呢?

INSERT INTO testsales(CUST_NO,DIS_SKU_NO,INV_DATE,SALES_AMT,SALES_QTY,SALES_REP) 
SELECT COPTG.TG004,COPTH.TH004,COPTG.TG003,COPTH.TH037-COPTH.TH047-COPTH.TH202,COPTH.TH008+COPTH.TH024,COPTG.TG006 
FROM COPTG
,COPTH
left join INVMB on COPTH.TH004 = INVMB.MB001 
WHERE COPTG.TG003 BETWEEN '20190201' AND '20190305' 
AND INVMB.MB032 = 'T145';
fufujane iT邦新手 5 級 ‧ 2019-04-01 12:14:21 檢舉

試了一下這個程式碼才是我要的結果
https://ithelp.ithome.com.tw/upload/images/20190401/20116501WCNqmWFS9z.png

但是結果希望再把相同客戶相同品號的金額加總,我使用 GROUP BY testsales.CUST_NO; 但是會"跑出無法繫結多重部分 (Multi-Part) 識別碼 "testsales.CUST_NO"。"

你寫法錯誤
testsales是存入匯入的資料~
那你加總就要
另外加總SQL呢

select testsales.CUST_NO
from testsales
GROUP BY testsales.CUST_NO
fufujane iT邦新手 5 級 ‧ 2019-04-01 14:04:32 檢舉

非常感謝!終於完成了~謝謝

我要發表回答

立即登入回答