0

これが私の質問です:

SELECT 
    CONCAT( YEAR( prm.fromdt ) , '|', MONTH( prm.fromdt ) ) AS k, 
    CONCAT( YEAR( prm.fromdt ) , ' - ', MONTH( prm.fromdt ) ) AS v,
FROM prm
GROUP BY k
ORDER BY `k` DESC

どちらが返されますか:

K       V
2009|7  2009 - 7
2009|6  2009 - 6
NULL    NULL

代わりNULL NULLに、私が持っているnullの数を取得する方法はありますか?何かのようなもの

K       V
2009|7  2009 - 7
2009|6  2009 - 6
Nulls   6
4

4 に答える 4

2

追加するCOUNT()

SELECT 
    CONCAT( YEAR( prm.fromdt ) , '|', MONTH( prm.fromdt ) ) AS k, 
    CONCAT( YEAR( prm.fromdt ) , ' - ', MONTH( prm.fromdt ) ) AS v,
    COUNT(*) AS c
FROM prm
GROUP BY k
ORDER BY `k` DESC

どちらが戻る必要があります

k              v             c
2009|7  2009 - 7    {count of this group}
2009|6  2009 - 6    {count of this group}
NULL    NULL         6
于 2012-09-21T14:06:23.247 に答える
2

あなたはこれを行うことができます:

SELECT CONCAT( YEAR( prm.fromdt ) , '|', MONTH( prm.fromdt ) ) AS k, 
       coalesce(CONCAT( YEAR( prm.fromdt ) , ' - ', MONTH( prm.fromdt ) ), cast(count(*) as varchar(255)) AS v   
FROM prm
GROUP BY k
ORDER BY `k` DESC

異なるタイプのデータを1つの列に混在させるのは好きではありません。ただし、これはニーズを満たす可能性があります。

于 2012-09-21T14:17:05.793 に答える
1

xdazzからの回答に基づいて:

select k, case when v is null then c else v end as v
from
(
SELECT 
    CONCAT( YEAR( prm.fromdt ) , '|', MONTH( prm.fromdt ) ) AS k, 
    CONCAT( YEAR( prm.fromdt ) , ' - ', MONTH( prm.fromdt ) ) AS v,
    COUNT(*) AS c
FROM prm
GROUP BY k
) x
ORDER BY `k` DESC

しかし、dazzが指摘しているように、列タイプを混合していることになります。カウントを文字列値に簡単にキャストできますが、それは、コンシューマーが列で混合データ型を暗黙的に取得しているという事実を回避しませんv

于 2012-09-21T14:11:55.910 に答える
0

基本的なSQLは次のとおりです。

COUNT(somefield) WHERE prm.fromdt IS NULL

しかし、これを実際に使用する方法は、正確に何をしているかによって異なります。あなたが望むことはあなたが日付でしていることと同じではないように思えます。2つを混ぜると、面倒になる可能性があります。

于 2012-09-21T14:06:42.990 に答える