'Name%'を持つSQLこんにちは、
オープンデータベース内にSQLクエリがあり、'FAIL%'のようなものを検索しています。私は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"
);
名前stationとdatebとdateeが作成されました。ご協力いただきありがとうございます。
再: '名前%'のSQL提案をありがとう。
再: '名前%'のSQLこれにアプローチする別の方法があります。
FROM句では複数のテーブルを使用できます。例えば、
t1、t2、t3のどこからt1.something = t2.somethingおよびt1.something = t3.something。
これらのテーブルはテーブルである必要はなく、クエリでも、同じテーブルに対するクエリでもかまいません(たとえば再帰結合)。したがって、たとえば、あなたの場合、FROM句では、次のようになります。
SELECT d1。<何か>、d2。<何か>など
から
(SELECT DISTINCT boardno、開始時刻、駅からの結果WHERE 結果 '%FAIL%'のような日付( 始まる時間 )「2015年1月31日」と「2015年12月31日」の間
グループ化 boardno 積算カウント(*)> 1) AS d1 / *失敗表* / 、
(SELECT DISTINCT boardno、開始時間、開始からの結果駅
どこに日付( 始まる時間 )「2015年1月31日」と「2015年12月31日」の間結果のような '%PASS%') AS d2 / *パス表* /
WHERE d1。<何か> = d2。<何か>など
最後のWHERE句の後まで、ORDER BYは実際には必要ありません。これは実際には表示上のものにすぎないためです。ここではGROUP BYが有効な句です。選択は要約統計に基づいています。count()をケースに入れます。また、クエリでは、開始時間はあいまいなものです。わかりやすくそれを明記し、どこから来たのか - 私の例では、私は両方のテーブルからそれを持ってきます。行数を返すCOUNT(*)を使用しました。 http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n123fsko39j44pn16zlt087e1m2h.htm&docsetVersion=9.4&locale=ja )
再: '名前%'のSQLありがとう。
再: '名前%'のSQL計算のリンクが間違っています。 http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n0jxri3yohqdwbn1slekmsc882gz.htm&docsetVersion=9.4&locale=ja 再: '名前%'のSQL他にもいくつかあります。
結果フィールドには標準的な回答がないため、「FAIL%」と表示されます。そのため、'%FAIL%'をテストしたり、BTRIM()と組み合わせて使用したりすることをお勧めします。また、大文字であることを確認するためにフィールドをUPPER()する必要があるかもしれません(JMP機能ではない、確認してください)。そして私はPASSについての2番目の観察です - あなたは '%PASS%'かそれに類似したものが欲しいかもしれません。
もう1つの観察 - HAVING test> 1をHAVING CALCULATED test> 1に置き換える必要があるかもしれません(「 http://documentation.sas.com/?docsetId=sqlproc&docsetTarget=n12wnf0zqw2frvn1bghzrncuh89m.htm&docsetVersion=9.4&locale=ja ")。
再: '名前%'の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'
ヴィンスが言ったように LIKE 'FAIL%' うまくいくはずです。 私はあなたがまた言っていることに気づく 「合格」のような 。 ワイルドカードが不要な場合は、 = '合格' 同じように動作します。
私はあなたのログにSQLステートメントをプリントアウトし、それからあなたのデータベースで直接内部クエリを実行することから始めます。 Oracleを使用している場合は、PL / SQL DeveloperやToadなどのツールを使用できます。 また、ステーションデータベーステーブルを区別するために、各サブクエリにエイリアスを入れることもできます。
再: '名前%'のSQLそれはうまくいくはずです。 私はいつもやります。データベースを見なくても、本当に何が悪いのかを言うことはできません。
最後の文字列を取り出してSQLで実行し、出力が何であるかを確認しましたか?