【问题标题】:How to display String of records row by row in MySQL如何在MySQL中逐行显示记录字符串
【发布时间】:2012-12-19 05:26:40
【问题描述】:

当我执行我的选择查询时,我得到如下结果:

注意:我对 EmpId 和 Absent_dates 列使用了 Group_ConCat() 函数,因为这些列从我的 Select Query 中的其他表返回多个值

我的查询:

SELECT Group_Concat(tp.EMPCODE), tp.DEPARTMENT, Group_Concat(d.dte) Absentddate, COUNT(tp.EMPCODE) Totalnoofabsentdates
FROM test_prefixmaster tp
JOIN daterange30 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;

执行我的查询后,结果如下:

 EmpId                 Absent_dates                   Total_no_of_Absent_days
    1101                  2012-12-02                            1
    1102,1102          2012-12-02,2012-12-03                    2
    1104,1104,1104     2012-12-02,2012-12-03,2012-12-04         3

但我的实际要求是显示如下结果:

EmpId        Absent_dates            Total_no_of_Absent_days
1101          2012-12-02                     1
1102          2012-12-02
1102          2012-12-03                     2
1104          2012-12-02
1104          2012-12-03
1104          2012-12-04                     3

任何人都可以在MySQL中使用什么功能吗? 谢谢

【问题讨论】:

  • 不要使用组 concat 函数它会返回相同的答案
  • 添加您的查询以进行检查
  • 最好添加你的查询,如果你可以在 sqlfiddle 中。你认为我们可以猜到你的查询或者查询会变魔术?

标签: mysql sql select count


【解决方案1】:

试试这个

  SELECT tp.EMPCODE, tp.DEPARTMENT, d.dte Absentddate, COUNT(tp.EMPCODE) Totalnoofabsentdates
   FROM test_prefixmaster tp
   JOIN daterange30 d
  LEFT JOIN test_prefixtransactions tpt ON (tp.EMPCODE = tpt.empcode) AND DATE(S_DateTime) = d.dte
    WHERE tpt.empcode IS NULL
  ORDER BY tp.EMPCODE;

【讨论】:

  • 当我从 SQL 查询中删除 Group_Concat() 函数时,我正在跳过其他记录(我能够显示单个记录)我没有显示来自记录字符串的其他记录跨度>
  • 你能在 sqlfiddle 中举个例子吗?
  • 看看能不能在这里修改,把你的表数据放上去。 test.demo,我就是这样填的
  • 主表包含所有员工记录.. 在事务表中 PresentDate 列存储员工当前日期时间,这意味着员工在时间和外出时间详细信息....如果员工缺席则没有记录将存储在事务表中
  • 我想显示两个给定日期范围内的员工缺席详细信息,就像我的问题中一样
【解决方案2】:

试试这个:

SELECT tp.EMPCODE, tp.DEPARTMENT, d.dte, IFNULL(A.Totalnoofabsentdates , '') Totalnoofabsentdates
FROM test_prefixmaster tp 
JOIN daterange d
LEFT JOIN test_prefixtransactions tpt ON (tp.EMPCODE = tpt.empcode) AND DATE(S_DateTime) = d.dte
LEFT JOIN ( SELECT tp.EMPCODE, d.dte Absentddate, COUNT(tp.EMPCODE) Totalnoofabsentdates
            FROM test_prefixmaster tp
            JOIN daterange1 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) AS A ON tp.EMPCODE = A.EMPCODE AND d.dte = A.Absentddate; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2018-01-26
    • 1970-01-01
    相关资源
    最近更新 更多