
表如上圖所示,學生和專案二行可以為空,也可有值
1、先查并優先回傳當學生和專案行都不為空的資料 ,
例如傳入資料:小李和跳繩,則優先回傳ID為2
2、當傳入學生名稱,但專案傳空,則優先回傳學生列含有該學生名稱的ID,
例如傳入資料:小李,但專案傳空,滿足條件就是ID=5
如果傳入資料:學生為空,但專案有值,例如傳入跑步,那么回傳ID=3
3、當學生和專案都傳空,表示這二列全匹配,就是ID=4
能否一條SQL實作,先優先回傳符合二列都存在資料 ,如果不存在先查學生列有值,專案為空,如果不存在,再查專案有值,學生為空;
最后再不存在,則查二列都為空的記錄
uj5u.com熱心網友回復:
你這上下描述的有些矛盾,如果學生和專案都有非空值傳入,但是沒有完全匹配的資料,這時是直接沒有記錄查出來,還是拿學生欄位不為空且專案為空的記錄去匹配查找。如果還是沒有匹配資料,那是不是再進一步拿學生欄位為空但是專案有值的資料去匹配。uj5u.com熱心網友回復:
優先查詢二個欄位都有包含資料的,再查有一個欄位包含,最后再查兩個欄位都為空。如果為空二個欄位不存在, 就回傳無。uj5u.com熱心網友回復:
SELECT TOP 1 *FROM
(SELECT *,1 AS SEQ FROM TABLE WHERE ','+學生+',' LIKE '%,'+@A+',%' AND ','+專案+',' LIKE '%,'+@B+',%'
UNION ALL
SELECT *,2 FROM TABLE WHERE ','+學生+',' LIKE '%,'+@A+',%' AND ISNULL(專案,'')=''
UNION ALL
SELECT *,3 FROM TABLE WHERE ISNULL(學生,'')='' AND ','+專案+',' LIKE '%,'+@B+',%'
UNION ALL
SELECT *,4 FROM TABLE WHERE ISNULL(學生,'')='' AND ISNULL(專案,'')='') AS A
ORDER BY SEQ
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14555.html
標籤:基礎類
上一篇:觸發器中如何只修改當前新增資料?
下一篇:聽說爆照能漲粉
