2016-04-07 17 views
-2

SQL文:mysqlで特定の条件のレコードを取り出す方法は?

SELECT 
    b.*, 
    e.Lastname, 
    e.Firstname, 
    e.ID_SC, 
    e.Program, 
    r.BReasonDetails 
FROM 
    tblbadgetemporaryborrower b 
     INNER JOIN 
    (SELECT 
     e.*, p.Program 
    FROM 
     tblemployee e 
    INNER JOIN tblemployeeprogram p ON p.ID_P = e.ID_P) e ON e.EmployeeID = b.EmployeeID 
     INNER JOIN 
    tblbadgetemporaryborrowerreason r ON r.ID_BR = b.ID_BR 
HAVING e.ID_SC = {$_GET['ID_SC']} 
ORDER BY b.EmployeeID ASC 

Q:はどのように私はLostの理由で従業員データを取得し、それの発生をカウントすることができます。

screenshot

予想される出力は:

100827038 | Larrazabal, Victor Ceasar | 4 (`Lost` count) 

答えて

1

あなたがする必要があるすべては、あなたのクエリにWHERE句を追加

SELECT 
     b.*, 
     e.Lastname, 
     e.Firstname, 
     e.ID_SC, 
     e.Program, 
     r.BReasonDetails 
     FROM tblbadgetemporaryborrower b 
     INNER JOIN (
        SELECT e.*, p.Program 
        FROM tblemployee e 
         INNER JOIN tblemployeeprogram p ON p.ID_P = e.ID_P 
        ) e ON e.EmployeeID = b.EmployeeID 
     INNER JOIN tblbadgetemporaryborrowerreason r ON r.ID_BR = b.ID_BR 

     WHERE r.BReasonDetails = 'Lost' 

     HAVING e.ID_SC = {$_GET['ID_SC']} 
     ORDER BY b.EmployeeID ASC 
+0

、あなたに感謝し、すべての入力が私を助け:) –

1

まず、既存のクエリでは、することができますhavingではなくwhereを使用してください。また、サブクエリはFROM句には必要ありません。私はあなたがどんなLostたすべての行を望んでいたと思った

SELECT b.*, e.Lastname, e.Firstname, e.ID_SC, p.Program, r.BReasonDetails 
FROM tblbadgetemporaryborrower b INNER JOIN 
    tblemployee e 
    e.EmployeeID = b.EmployeeID JOIN 
    tblemployeeprogram p 
    ON p.ID_P = e.ID_P INNER JOIN 
    tblbadgetemporaryborrowerreason r 
    ON r.ID_BR = b.ID_BR 
WHERE e.ID_SC = {$_GET['ID_SC']} AND 
     EXISTS (SELECT 1 
       FROM tblbadgetemporaryborrowerreason r2 
       WHERE r2.ID_BR = b.ID_BR AND r2.BReasonDetails = 'Lost' 
      ) 
ORDER BY b.EmployeeID ASC; 

EDIT:その後、別の条件でこれを増やすことができます。しかし、私はあなたが集計クエリを望んで行うことを参照してください。

SELECT b.*, e.Lastname, e.Firstname, COUNT(*) as LostCount 
FROM tblbadgetemporaryborrower b INNER JOIN 
    tblemployee e 
    e.EmployeeID = b.EmployeeID JOIN 
    tblemployeeprogram p 
    ON p.ID_P = e.ID_P INNER JOIN 
    tblbadgetemporaryborrowerreason r 
    ON r.ID_BR = b.ID_BR 
WHERE e.ID_SC = {$_GET['ID_SC']} AND r.BReasonDetails = 'Lost' 
GROUP BY b.EmployeeId 
は私の想像力を高める
+0

私は 'Having'を使用しています私が持っている従業員の出現をカウントされますので、 「紛失した」理由は、どこで使うのでしょうか? –

+1

@MattMagallo。 。 。はい。あなたは通常、集計を行うときだけ 'having'を使用します。 MySQLも同様に使用を拡張しますが、ここでは必要ありません。 –

+0

明確化のためにありがとう:) –

関連する問題