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
依據前三個欄位先做排序 RN
同樣的資料會變成 1 , 2 , 3
外面做SELECT 時 如果RN>1 (同樣資料的第二筆以上)
則顯示空白
z22344566
可能麻煩你測試一下
謝謝您的幫忙與解釋
前篇回覆失禮的地方真的很抱歉
但是還是非常感謝您,感恩。
這不關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
謝謝您的熱心幫忙!!