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让我有多少空值?就像是

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

4 回答 4

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

我不喜欢在一列中混合不同类型的数据。但是,这可能会满足您的需求。

于 2012-09-21T14:17:05.793 回答
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 回答
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 指出的那样,您正在混合列类型。您可以轻松地将计数转换为字符串值,但这并不能解决消费者在 column 中隐式获取混合数据类型的事实v

于 2012-09-21T14:11:55.910 回答
0

基本的 SQL 是:

COUNT(somefield) WHERE prm.fromdt IS NULL

但是如何实际使用它取决于您到底在做什么。听起来您想要的与您对日期所做的不同。如果将两者混为一谈,很可能会很乱。

于 2012-09-21T14:06:42.990 回答