帶有'Name%'的SQL嗨,
我在開放數據庫中有一個SQL查詢並蒐索“FAIL%”之類的內容。我喜歡搜索任何失敗的名字***。你是如何實現這一目標的?目前只選擇FAIL%。
dt3 = Open Database(
"DSN=" || one_product || ";UID=**;PWD=***;",
"select count(distinct BoardNo) from " || station || " where boardno in (select BoardNo from (select BoardNo,result,starttime from " ||
station || " where BoardNo in (select BoardNo from (select BoardNo,result,count(result) as test from " || station ||
" where result like 'FAIL%' group by BoardNo having test >1 order by starttime desc)as comm) order by BoardNo,starttime desc) as t where result like 'PASS' group by BoardNo)and date(starttime) between '"
|| dateb || "' and '" || datee || "'",
"ABC"
);
已創建名稱工作站和日期和日期。謝謝你的幫助。
Re:帶'Name%'的SQL謝謝你的建議。
Re:帶'Name%'的SQL還有另一種方法可以解決這個問題。
FROM子句允許多個表。例如,
從t1,t2,t3 WHERE t1.something = t2.something和t1.something = t3.something。
這些表不必是表,它們可以是查詢,甚至是同一個表上的查詢(例如,自反連接)。因此,例如,在您的情況下,在FROM子句中,您可以:
SELECT d1。,d2。等
從
(SELECT DISTINCT boardno,starttime,result FROM station WHERE 結果像'%FAIL%'和日期( 開始時間 )'2015年1月31日'和'2015/31/2015'之間'
通過...分組 boardno 有計數(*)> 1) AS d1 / *表失敗* / ,
(SELECT DISTINCT boardno,starttime,result FROM 站
在哪裡(日期) 開始時間 )'2015年1月31日'和'2015年12月31日'之間'和結果像'%PASS%') AS d2 / *通行證表* /
在哪裡d1。 = d2。等
你不需要ORDER BY直到最後 - 這裡,在最後一個WHERE子句之後 - 因為它實際上只是一個顯示事物 - GROUP BY是這裡的操作條款 - 你的選擇是基於一個匯總統計 - 在這裡case一個count()。此外,在您的查詢中,starttime有點模棱兩可。更好地說明它以及它來自哪裡 - 所以在我的例子中,我從兩個表中引入它。我使用了COUNT(*)來返回行數(參見 http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=en )
Re:帶'Name%'的SQL謝謝。
Re:帶'Name%'的SQL我得到了錯誤的CALCULATED鏈接 - 試試: http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=en Re:帶'Name%'的SQL其他一些旁白。
看起來你的結果字段沒有標準答案,因此'FAIL%'。因此,您可能希望測試'%FAIL%',和/或與BTRIM()一起使用。此外,您可能希望UPPER()字段以確保它是大寫(不確定JMP功能,檢查它)。而我對PASS的觀察次數 - 您可能想要'%PASS%'或類似的東西。
另一個觀察 - 你可能需要用HAVING CALCULATED test> 1替換HAVING test> 1(參見“ http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.htm&docsetVersion=9.4&locale=en “)。
Re:帶'Name%'的SQL我冒昧地重新格式化您的查詢,因為它很難閱讀。 我替換了一些假名和日期值,並在內部查詢中添加了別名:
SELECT COUNT(DISTINCT d3.BOARDNO)
FROM DB.STATION d3
WHERE d3.BOARDNO IN
(SELECT t.BOARDNO
FROM (SELECT d2.BOARDNO, d2.RESULT, d2.STARTTIME
FROM DB.STATION d2
WHERE d2.BOARDNO IN
(SELECT comm.BOARDNO
FROM (SELECT d1.BOARDNO, d1.RESULT, COUNT(d1.RESULT) AS TEST
FROM DB.STATION d1
WHERE d1.RESULT LIKE 'FAIL%'
GROUP BY d1.BOARDNO
HAVING TEST > 1
ORDER BY d1.STARTTIME DESC) AS COMM)
ORDER BY d2.BOARDNO, d2.STARTTIME DESC) AS T
WHERE RESULT LIKE 'PASS'
GROUP BY t.BOARDNO)
AND DATE(d3.STARTTIME) BETWEEN '1/31/2015' AND '12/31/2015'
正如文斯所說喜歡'失敗' 應該管用。 我注意到你也在說喜歡'通過' 。 如果你不需要通配符,那麼 ='通過' 會一樣的。
我會將SQL語句打印到您的日誌中,然後直接在您的數據庫上運行內部查詢。 如果您使用的是Oracle,則可以使用PL / SQL Developer或Toad等工具。 您還可以在每個子查詢中放置別名以區分工作站數據庫表。
Re:帶'Name%'的SQL這應該工作。 我一直這樣做。沒有看到db,不能真正說出什麼是錯的。
您是否嘗試過使用最終字符串並在SQL中運行以查看輸出是什麼?