Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Mysql 使用联接表SQL中的if条件确定列数据_Mysql_Sql Server - Fatal编程技术网

Mysql 使用联接表SQL中的if条件确定列数据

Mysql 使用联接表SQL中的if条件确定列数据,mysql,sql-server,Mysql,Sql Server,我有一个很好用的查询,我想要帮助的是如何合并一个条件来确定给定列上显示的值。也就是说,如果表的一列有一个值,比如“COA授权”,那么添加的列日期应该显示日期,否则该列应该显示null 这是我目前的疑问 SELECT r.request_id, r.product_name, r.created_at, r.can,a_s.stat, r.client_id, CONCAT(u.fname,' ',u.lname) 'analyst' , t.date_added (//should show t

我有一个很好用的查询,我想要帮助的是如何合并一个条件来确定给定列上显示的值。也就是说,如果表的一列有一个值,比如“COA授权”,那么添加的列日期应该显示日期,否则该列应该显示null

这是我目前的疑问

SELECT r.request_id, r.product_name, r.created_at, r.can,a_s.stat, r.client_id, CONCAT(u.fname,' ',u.lname) 'analyst' , t.date_added (//should show the value of date_added else NULL based on a condition for this column),
    FROM request r
    LEFT OUTER JOIN assigned_samples a_s ON r.request_id = a_s.labref
    LEFT OUTER JOIN user u ON a_s.analyst_id = u.id
    LEFT OUTER JOIN tracking_table t ON r.request_id = t.labref
    WHERE r.client_id='$cid'
    AND r.created_at BETWEEN '$start' AND '$end'
    AND a_s.department_id = '$dept'
    GROUP BY r.request_id
    ORDER BY `r`.`created_at` DESC "
尝试一下:

SELECT r.request_id, r.product_name, r.created_at, r.can,a_s.stat, r.client_id, CONCAT(u.fname,' ',u.lname) 'analyst' , 
IFF(nameOfColumnToTest = 'Authorization of COA', t.date_added, null) AS DateAdded 
    FROM request r
    LEFT OUTER JOIN assigned_samples a_s ON r.request_id = a_s.labref
    LEFT OUTER JOIN user u ON a_s.analyst_id = u.id
    LEFT OUTER JOIN tracking_table t ON r.request_id = t.labref
    WHERE r.client_id='$cid'
    AND r.created_at BETWEEN '$start' AND '$end'
    AND a_s.department_id = '$dept'
    GROUP BY r.request_id
    ORDER BY `r`.`created_at` DESC "

在mysql和ms sql中,您可以使用大小写表达式(;)有条件地为字段赋值:

SELECT r.request_id, r.product_name, r.created_at, r.can,a_s.stat, r.client_id, CONCAT(u.fname,' ',u.lname) 'analyst' , 
    CASE WHEN Column_To_Test = 'Authorization of COA' THEN t.date_added
        ELSE null
    END AS date_added 
    FROM request r
    LEFT OUTER JOIN assigned_samples a_s ON r.request_id = a_s.labref
    LEFT OUTER JOIN user u ON a_s.analyst_id = u.id
    LEFT OUTER JOIN tracking_table t ON r.request_id = t.labref
    WHERE r.client_id='$cid'
    AND r.created_at BETWEEN '$start' AND '$end'
    AND a_s.department_id = '$dept'
    GROUP BY r.request_id
    ORDER BY `r`.`created_at` DESC "

这样,解决方案在数据库之间更具可移植性。Mysql提供if()函数,ms sql iif()来实现上述功能,但这些都是特定于产品的解决方案。

我相信,在这种情况下,一个简单的案例说明就足够了

SELECT r.request_id, r.product_name, r.created_at, r.can,a_s.stat, r.client_id, 
CONCAT(u.fname,' ',u.lname) 'analyst', 
CASE WHEN ConditionColumn = 'Authorization of COA' THEN t.date_added 
ELSE NULL END AS 'date_added' 
    FROM request r
    LEFT OUTER JOIN assigned_samples a_s ON r.request_id = a_s.labref
    LEFT OUTER JOIN user u ON a_s.analyst_id = u.id
    LEFT OUTER JOIN tracking_table t ON r.request_id = t.labref
    WHERE r.client_id='$cid'

尝试使用Case语句,如

(条件1和条件2或…条件N)时,则(值1)其他(值1)结束

这里,条件\u 1可以是列记录值及其列记录值的组合
Value\u 1可以是单值[Ex:Null或“某个字符串”]或嵌套sql语句返回的值,如[Ex:(select count(*)from…)

在mysql use if()函数或case表达式中标记您知道的所有RDBMS,或者在ms sql用例表达式中仅保留一个:)。