目标是检索一个表中具有以下内容的用户数:
所有一个查询,结果应该是
nUsersActive nUsersExpired nUsersPreregistered
10 2 15
稍后将进行json_encoded并传递给ExtJS脚本进行显示。
任何提示?我试了好几次都没有成功。我尝试使用UNION语句,我得到了正确的数字,但当然是在专栏中,而我需要它们。
感谢您的支持。
答案 0 :(得分:6)
以下内容应该有效,您可能需要针对您正在使用的特定数据库进行调整。
将它们列入列:
select
count(case when EXPIREDATE > CURRENT_TIMESTAMP then 1 end) AS nUsersActive,
count(case when EXPIREDATE < CURRENT_TIMESTAMP then 1 end) AS nUsersExpired,
count(case when EXPIREDATE IS NULL then 1 end) AS nUserPreregistered
from users_table
并且在行中(这不是那么有效!):
select
'nUsersActive' AS Param
count(case when EXPIREDATE > CURRENT_TIMESTAMP then 1 end) AS Value
from users_table
UNION ALL
select 'nUsersExpired',
count(case when EXPIREDATE < CURRENT_TIMESTAMP then 1 end)
from users_table
UNION ALL
select 'nUserPreregistered',
count(case when EXPIREDATE IS NULL then 1 end)
from users_table
答案 1 :(得分:0)
我假设您使用的是SQL Server。您应该能够使用CASE语句获得您正在寻找的内容。如果条件为真,请确保返回某些内容(任何内容),如果条件为false,则返回NULL。这是msdn文档:http://msdn.microsoft.com/en-us/library/ms181765.aspx
您的查询将如下所示:
select COUNT(CASE WHEN @ThingToCheck = 'Value' THEN 1 ELSE NULL END) as Count1, COUNT(CASE WHEN @ThingToCheck = 'Value' THEN 1 ELSE NULL END) FROM ....
答案 2 :(得分:0)
SELECT COUNT(CASE WHEN EXPIREDATE > CURRENT_TIMESTAMP THEN 1 END) AS nUsersActive,
COUNT(CASE WHEN EXPIREDATE < CURRENT_TIMESTAMP THEN 1 END) AS nUsersExpired,
COUNT(CASE WHEN EXPIREDATE IS NULL THEN 1 END) AS nUsersPreregistered
FROM Users