Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过标识列名在SQL中使用MS Access代码_Sql_Sql Server_Case_Iif - Fatal编程技术网

通过标识列名在SQL中使用MS Access代码

通过标识列名在SQL中使用MS Access代码,sql,sql-server,case,iif,Sql,Sql Server,Case,Iif,我在Microsfot Access中使用此代码并获得正确的结果: SELECT tbl_Test.generate_query AS Query Name, Sum(IIf([RecNum] Is Not Null,1,0)) AS Attempts, Sum(IIf([Query_test]='Yes',1,0)) AS Successes, Sum(IIf([Query_test]='No',1,0)) AS Failures,

我在Microsfot Access中使用此代码并获得正确的结果:

SELECT tbl_Test.generate_query AS Query Name, 
       Sum(IIf([RecNum] Is Not Null,1,0)) AS Attempts, 
       Sum(IIf([Query_test]='Yes',1,0)) AS Successes, 
       Sum(IIf([Query_test]='No',1,0)) AS Failures, 
       [Successes] & "/" & [Attempts] AS SuccessProportion
       FROM tbl_Test
       GROUP BY tbl_Test.generate_query
       ORDER BY tbl_Test.generate_query;
当我将其转换为SQL时-
[successfulls]+'/'+[truments]按比例转换
失败,列名无效:

SELECT generate_query AS Query_Name, 
       sum(case when RecNum is NOT NULL then 1 else 0 end) AS Attempts, 
       sum(case when Query_test = 'Yes' then 1 else 0 end) AS Successes,
       sum(case when Query_test = 'No' then 1 else 0 end) AS Failures,
       [Successes]  + '/'  +  [Attempts] AS Proportion
       FROM tbl_TPF 
       GROUP BY generate_query 
       ORDER BY generate_query;
输出如下所示:

Query Name           Attempts        Successes      Failures    SuccessProportion
First Query             1               0               1               0/1
Second Query            1               0               1               0/1
Third Query             2               1               1               1/2
Fourth Query            1               1               0               1/1
Fifth Query             1               0               1               0/1
Sixth Query             1               0               1               0/1

我可以使用我在SQL中标识的列吗?

您使用的是什么RDBMS?请贴上标签。你必须使用你在BD上得到的实际列名。它无法知道它在access上是如何命名的(如果名称不同),我不明白你在说什么。我正在使用SQL Server Management Studio和Microsoft Visual Studio仅供参考,
sum(如果RecNum不为NULL,则为1 else 0 end)
是大量多余的代码。您可以简单地使用
COUNT(RecNum)
,类似地,您可以使用
COUNT(NULLIF(Query\u test,'No'))作为成功,使用NULLIF(Query\u test,'Yes')作为失败来缩短代码。在您的例子中,没有性能提升,但更整洁的关系数据库管理系统是MS SQL。标记它以区别于MySql、Oracle等是一种很好的做法。感谢jean和Garethdn没有问题很高兴它帮助您现在可以接受答案:)我的客户决定他们现在希望看到十进制的比例-这可以通过CAST调用完成,还是我必须以不同的方式编码?
SELECT  Q.Query_Name
       ,Q.Attempts
       ,Q.Successes
       ,Q.Failures
       ,CAST(Q.[Successes] AS NVARCHAR(10)) + '/' + CAST(Q.[Attempts] AS NVARCHAR(10)) AS Proportion
FROM (
SELECT generate_query AS Query_Name, 
       sum(case when RecNum is NOT NULL then 1 else 0 end) AS Attempts, 
       sum(case when Query_test = 'Yes' then 1 else 0 end) AS Successes,
       sum(case when Query_test = 'No' then 1 else 0 end) AS Failures
       FROM tbl_TPF 
       GROUP BY generate_query 
     )Q
ORDER BY Q.Query_Name