2013-02-13 173 views
2

这是我的表看起来像现在:选择具有多个值的记录,并一一列举

正如你可以看到,有多个记录,像XRAY。 我想要做的是列举那些像 1 X射线 第二X射线 第三X射线

或任何种类的枚举。

这是我目前表的方式

"SELECT 
      `incurredcharges`.`procedure_no`, 
    `c`.`procedure` 

FROM 
    incurredcharges 
    INNER JOIN (
    SELECT `procedure`, `procedure_no` FROM `charges` 
    UNION ALL 
    SELECT `confinement`, `procedure_no` FROM `confinement` 
    UNION ALL 
    SELECT `service`, `procedure_no` FROM `ultrasound` 
) c ON `incurredcharges`.`procedure_no` = c.`procedure_no` 
WHERE `incurredcharges`.`patient_no` = '$id'"; 

回答

0

查询虽然我不知道如何前面加上“第一”,“第二”等等,你可以在前面加上1,2,等。下面是一个例子:

SELECT 
    CONCAT(CASE WHEN cnt > 1 THEN CONCAT(RN,'-') ELSE '' END, t.Proc) Proc 
FROM 
    (
    SELECT 
     @curRow:=CASE WHEN @prevRow = a.Proc THEN @curRow+1 ELSE 1 END AS rn, 
     a.Proc, 
     @prevRow:=Proc grp 
    FROM (
     SELECT Proc FROM Procedures ORDER BY Proc 
    ) a JOIN (SELECT @curRow:=0) r 
) t JOIN 
    (
    SELECT Proc, COUNT(Proc) cnt 
    FROM Procedures 
    GROUP BY Proc 
) c ON t.proc = c.proc 

这里是SQL Fiddle

基本上你需要将你的程序分组在一起,给出每个组的行号。对于多于一个的记录,请在前面加上行号。

---编辑---

考虑您的意见,您的查询只需要被放置在主FROM(靠近中间),然后您需要携带PROCNO由每个select语句。这里是应该非常接近,虽然未经测试:

SELECT 
    procno, 
    CONCAT(CASE WHEN cnt > 1 THEN CONCAT(RN,'-') ELSE '' END, t.Proc) Proc 
FROM 
    (
    SELECT 
     @curRow:=CASE WHEN @prevRow = a.Proc THEN @curRow+1 ELSE 1 END AS rn, 
     a.Proc, 
     a.Procno, 
     @prevRow:=Proc grp 
    FROM ( 
      SELECT 
      `incurredcharges`.`procedure_no` procno, 
      `c`.`procedure` proc 
      FROM 
      incurredcharges 
      INNER JOIN (
       SELECT `procedure`, `procedure_no` FROM `charges` 
       UNION ALL 
       SELECT `confinement`, `procedure_no` FROM `confinement` 
       UNION ALL 
       SELECT `service`, `procedure_no` FROM `ultrasound` 
      ) c ON `incurredcharges`.`procedure_no` = c.`procedure_no` 
      WHERE `incurredcharges`.`patient_no` = '$id' 
      ORDER BY `c`.`procedure` 
    ) a 
      JOIN (SELECT @curRow:=0) r 
) t JOIN 
    (
      SELECT 
      `incurredcharges`.`procedure_no` procno, 
      `c`.`procedure` proc, Count(*) cnt 
      FROM 
      incurredcharges 
      INNER JOIN (
       SELECT `procedure`, `procedure_no` FROM `charges` 
       UNION ALL 
       SELECT `confinement`, `procedure_no` FROM `confinement` 
       UNION ALL 
       SELECT `service`, `procedure_no` FROM `ultrasound` 
      ) c ON `incurredcharges`.`procedure_no` = c.`procedure_no` 
      WHERE `incurredcharges`.`patient_no` = '$id' 
      GROUP BY `incurredcharges`.`procedure_no`, 
      `c`.`procedure` 
) c ON t.proc = c.proc 

祝你好运。

+0

这是完美的。但是我无法将它与我的sql查询结合起来。 – jeffmangum 2013-02-13 19:49:31

+0

@jeffmangum - 很高兴听到这可以工作,但很抱歉的麻烦。我编辑了我的回复 - 见上文。让我知道它是如何为你工作的。如果你可以制作小提琴,我可以测试它,但这应该相当接近。祝你好运(如果它对你有帮助,别忘了接受答案):) – sgeddes 2013-02-13 19:58:23

+0

@jeffmangum - 你还需要更新最后一个用于计数的查询 - 我现在再编辑一次... – sgeddes 2013-02-13 19:59:44

相关问题