查詢雖然我不知道如何前面加上「第一」,「第二」等等,你可以在前面加上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
祝你好運。
這是完美的。但是我無法將它與我的sql查詢結合起來。 – jeffmangum 2013-02-13 19:49:31
@jeffmangum - 很高興聽到這可以工作,但很抱歉的麻煩。我編輯了我的回覆 - 見上文。讓我知道它是如何爲你工作的。如果你可以製作小提琴,我可以測試它,但這應該相當接近。祝你好運(如果它對你有幫助,別忘了接受答案):) – sgeddes 2013-02-13 19:58:23
@jeffmangum - 你還需要更新最後一個用於計數的查詢 - 我現在再編輯一次... – sgeddes 2013-02-13 19:59:44