2016-04-07 7 views
0

私は、どの列に表示される値を決定するための条件を組み込むかを支援したいと思っています。これは、テーブルの列に値が「COAの認可」と言っている場合、その後追加された列の日付は他の日付は列がここでヌル結合されたテーブル内の条件付きで列データを決定する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' , 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 " 
+0

どちらか知っているすべてのRDBMSにタグを付けるか、ただ一つだけを残してください:) –

+0

mysqlでは、if()関数またはcase式をms SQLで使用します。 – Shadow

答えて

-1

与えますこの試み:MySQLとMSの両方で

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 " 
0

あなたはcase式(mysql case; ms sql case)を使用することができ、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()を提供していますが、これは製品固有のソリューションです。

1

このケースでは単純なCASE文で十分であると私は信じています。

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' 
0

のようなケースステートメントを使用してください。

CASECondition_1Condition_2 OR ... Condition_NTHEN(VALUE_1)ELSE(VALUE_1)END

ここ条件 _1は、列レコード値とその組み合わせ列のレコードが と _1は、単一の値とすることができる値[例:NULLまたは「いくつかの文字列」]などのネストされたSQLステートメントから返された値[例:(COUNT(*を選択)から...)]

関連する問題