FC2ブログ
  1. 無料アクセス解析

【わからん】SQL

-------------------------------------------
SELECT
*
FROM
(

SELECT
top 10
*
FROM
[TblA]
WHERE
[TblA].[ColX] = 'Val1'

UNION

SELECT
top 10
*
FROM
[TblA]
WHERE
[TblA].[ColX] = 'Val2'

) AS 'TblTmp'

ORDER BY
[TblTmp].[ColX],
[TblTmp].[ColY] DESC
---------------------------------------------

【要求】
ColXの値が
・Val1であるもの
・Val2であるもの
の「各々で」、
ColYの値の降順で10個ずつ取得したい

【現状】
ColX = Val1であるデータの、
ColYが最大値から降順10件ではない、へんな降順10件が取得される

どうやりゃあいいんだ。
あ、MS-Sqlserverね。

Sqlserver、方言きつい。やめて欲しい。

この記事へのコメント

Re: 【わからん】SQL

考えるのメンドいから、応援だけしとくわ。

がんばれ~!

Re: 【わからん】SQL

SQLServer2005以上なら

.SELECT
. *
.FROM
. (
. SELECT
. [ColX]
. ,[ColY]
. ,ROW_NUMBER() OVER(PARTITION BY [ColX] ORDER BY [ColY] DESC) AS ROW_NUM
. FROM
. [TblA]
. WHERE
. [TblA].[ColX] IN ('Val1', 'Val2')
. ) AS TEMP
.WHERE
. [TEMP].[ROW_NUM] <= 10

こんな感じのSQLで何とかなるはず。
TOPはOracleで言うROWNUM <= 10 のような条件だから、
ちょっと違うらしい。

Re: 【わからん】SQL

分析関数使えなかったらどうするのかねー。
降順で並べ替えたやつをTOPで取ってくるのがいいのかねぇ。
パフォーマンス見てないけれど、多分UNION ALLの方が無難かな、と。

SELECT
[ColX]
,[ColY]
FROM
(
SELECT
TOP 10
[ColX]
,[ColY]
FROM
[TblA]
WHERE
[TblA].[ColX] = 'Val1'
ORDER BY [TblA].[ColY] DESC
UNION ALL
SELECT
TOP 10
[ColX]
,[ColY]
FROM
[TblA]
WHERE
[TblA].[ColX] = 'Val2'
ORDER BY [TblA].[ColY] DESC
) AS temp
ORDER BY
[temp].[ColX], [temp].[ColY] DESC

こんな感じで。

Re: 【わからん】SQL

有り難う御座います!

SQL難しいorz

分析…関数…未知すぎう…
べんきょうせななな……

なんか確か
unionでくっつけるもの同士の中に
orderbyつかえなくて
「えええええ」ってなったのです。
で、しょうがないから外だししたら
変な順番で出てきて。
きっとTOPの仕様がよくわかってなかったから
混乱したんだなあ orz

Re: 【わからん】SQL

ふ、ふふ。
なんぞよく調べたら
MSDE2000であったぞ…
Sqlserver2005互換のrow_numberがつかえないではないか…

要は行番号が振れれば
それに「rounum」とか別名つけてしまえばいいんだろうが
さあどうする

http://support.microsoft.com/kb/186133/ja?spid=2852&sid=700

… これはひどい orz

Re: 【わからん】SQL

2番目に書いたSQLじゃダメなの?
2005で正常に動いたよ。

Re: 【わからん】SQL

UNION もしくは UNION ALL の それぞれの中に OERDER BY があると何故か動かなかったんです…。
で ORDER BY を UNION の外に出して条件を複数にすれば、動くけど、TOPの結果がおかしいってことになっちゃって…。

私がどこかでミスしてた可能性が大きいので
週明けもう一度やってみます。
有り難う御座いますー。

Re: 【わからん】SQL

SQL触る機械がまたやってきたので2個目ので再度やってみました。

できたああああ。
一つ賢くなりました!
有難うございます!

コメントをお寄せ下さい

(コメント編集・削除に必要)
(管理者にだけ表示を許可する)

トラックバック

この記事のトラックバックURL
http://monostation.blog112.fc2.com/tb.php/2091-7e848aa9