0

私のクエリ:

SELECT tp.EMPCODE,
       tp.NAME,
       tp.DEPARTMENT, 
       Group_Concat(d.dte) AbsentDate, 
       COUNT(tp.EMPCODE) Totalnoofabsentdates
FROM test_prefixmaster tp
JOIN daterange25 d
LEFT JOIN test_prefixtransactions tpt 
       ON (tp.EMPCODE = tpt.empcode) AND DATE(S_DateTime) = d.dte
WHERE tpt.empcode IS NULL
GROUP BY tp.EMPCODE;   

私はこのようなレコードの文字列を持っています

Empcode         AbsentDate

111             2012-11-12,2012-11-23,2012-12-22

私の要件は、以下のようなレコードを表示することです:

Empcode          AbsentDate       
111              2012-11-12
                 2012-11-23
                 2012-12-22  

MySqlでレコードを表示するにはどうすればよいですか?

注: 私のクエリで Group_Concat 関数を削除すると、2012-11-12 レコードが表示されます (2012-11-23、2012-12-22 はスキップされます)。

4

1 に答える 1

1

私はこれを試してみますが、いくつかの情報が欠けています - 私のインラインコメントを読んでください:

SELECT
    tp.EMPCODE,
    tp.NAME,
    tp.DEPARTMENT,
    d.dte AbsentDate
FROM
    test_prefixmaster tp
JOIN
    daterange25 d
    ON (tp.[foreignKey] = d.[someKey]) --You need to specify this...
LEFT JOIN
    test_prefixtransactions tpt
    ON (tp.EMPCODE = tpt.empcode)
    AND DATE(S_DateTime) = d.dte --Where is S_DateTime from?
WHERE
    tpt.empcode IS NULL;

すべての行で値を繰り返したくない場合はEMPCODE、これを行うことができますが、SQL でこれを行う理由はわかりません。

CREATE TABLE tempTable AS (
SELECT
    tp.EMPCODE,
    d.dte AbsentDate
INTO
    #tempTable
FROM
    test_prefixmaster tp
JOIN
    daterange25 d
    ON (tp.[foreignKey] = d.[someKey]) --You need to specify this...
LEFT JOIN
    test_prefixtransactions tpt
    ON (tp.EMPCODE = tpt.empcode)
    AND DATE(S_DateTime) = d.dte --Where is S_DateTime from?
WHERE
    tpt.empcode IS NULL;
);

SELECT
    CASE WHEN COUNT(b.AbsentDate) = 1 THEN a.EMPCODE ELSE '' END AS EMPCode,
    a.AbsentDate
FROM
    tempTable a
LEFT JOIN
    tempTable b
    ON  (a.EMPCODE = b.EMPCODE)
    AND (a.AbesentDate >= b.AbesentDate)
GROUP BY
    a.EMPCODE,
    a.AbsentDate
ORDER BY
    1,2;
于 2013-01-07T06:51:55.590 に答える