2013-02-13 174 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

相關問題