iT邦幫忙

1

求ms sql 語法

  • 分享至 

  • xImage

請問各位大大
下圖表格中
要如何下SELECT 才能達成
謝謝大家回答!!!

補充
數量不相加,主要的問題如何將單別、單號、品號重複的移除,
只留下一筆,但是數量欄位還是不變,謝謝

https://ithelp.ithome.com.tw/upload/images/20190909/20103088JVcrnGhGVQ.png

https://ithelp.ithome.com.tw/upload/images/20190909/20103088gdbJdoFekL.png

看更多先前的討論...收起先前的討論...
Zed_Yang iT邦新手 3 級 ‧ 2019-09-09 17:17:26 檢舉
數量不用加起來?
z22344566 iT邦新手 4 級 ‧ 2019-09-09 17:19:13 檢舉
不用~
Zed_Yang iT邦新手 3 級 ‧ 2019-09-09 17:21:01 檢舉
所以是前面三個欄位 重複的資料不想要再顯示?
z22344566 iT邦新手 4 級 ‧ 2019-09-09 17:23:58 檢舉
對!!
建議使用SSRS去做, 這有些偏報表的功能, SSRS很方便達到您要的
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
Zed_Yang
iT邦新手 3 級 ‧ 2019-09-09 17:19:10
最佳解答
SELECT CASE WHEN RN>1 THEN '' ELSE 單別 END 單別,
CASE WHEN RN>1 THEN '' ELSE 單號 END 單號,
CASE WHEN RN>1 THEN '' ELSE 品號 END 品號,
數量
FROM (
SELECT RN = ROW_NUMBER() OVER(PARTITION BY 單別,單號,品號 ORDER BY  單別),
        單別,
        單號,
        品號,
        數量
FROM TABLE_NAME
) RankTABLE
Zed_Yang iT邦新手 3 級 ‧ 2019-09-09 17:28:41 檢舉

依據前三個欄位先做排序 RN
同樣的資料會變成 1 , 2 , 3
外面做SELECT 時 如果RN>1 (同樣資料的第二筆以上)
則顯示空白

Zed_Yang iT邦新手 3 級 ‧ 2019-09-09 17:29:31 檢舉

z22344566
可能麻煩你測試一下

z22344566 iT邦新手 4 級 ‧ 2019-09-11 17:14:01 檢舉

謝謝您的幫忙與解釋
前篇回覆失禮的地方真的很抱歉
但是還是非常感謝您,感恩。

1
japhenchen
iT邦超人 1 級 ‧ 2019-09-10 08:26:07

這不關SQL,只是你在輸出EXCEL(或其他表格)時,不再出跟上一行有相同鍵值內容的部份資料而已
以下假設你的MASTER跟DETAIL的關聯鍵是單號,語言也是我慣用的C#

var worksheet = excel.workbook.worksheets.Add("sheet1");
var Master = (from m in MSSQLDB.MasterTable
             where m.date >= new DateTime(2019,5,1) and m.date <= new DateTime(2019,5,31)
             order by m.單號
             select m).ToArray(); 
var Detail = (from d in MSSQLDB.DetailTable
             where Master.Select(x=>x.單號).Contain(d.單號)
             select d).ToArray(); 
// 以上是假設資料,我習慣一次就把所需資料撈到記憶體裡操作,而不是在資料庫cursor上

int rr = 1 ;// excel橫向列
forech(var md in Master){
    worksheet.cells[rr,1].value = md.單別;
    worksheet.cells[rr,2].value = md.單號;
    foreach(var dd in Detail.Where(p=>p.單號==md.單號){
        worksheet.cells[rr,3].value = dd.品號;
        worksheet.cells[rr,4].value = dd.數量;
        rr++;
    }
    rr++;
}
worksheet.save();//或網頁輸出 Response.BinaryWrite(excel.GetAsByteArray());或你慣用的輸出方式

我蠻喜歡用EXCEL輸出(C#搭配EPPLUS,免費套件),倒出報表都用不到幾秒!
https://ithelp.ithome.com.tw/upload/images/20190910/20117954CzM0gDbDUM.jpg

z22344566 iT邦新手 4 級 ‧ 2019-09-11 17:14:17 檢舉

謝謝您的熱心幫忙!!

我要發表回答

立即登入回答