2

これは私のテーブルが今どのように見えるかです:

ご覧のとおり、XRAYのように複数のレコードがあります。私がやりたいのは、それらを1番目のX線2番目のX線3番目の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'";
4

1 に答える 1

0

「1st」、「2nd」などの前に付ける方法はわかりませんが、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

そして、これがSQLFiddleです。

基本的に、プロシージャをグループ化して、各グループの行番号を指定する必要があります。複数のレコードがある場合は、行番号を前に付けます。

- -編集 - -

コメントを指定すると、クエリをメインのFROM内(中央付近)に配置する必要があります。次に、各selectステートメントにprocnoを設定する必要があります。テストされていませんが、非常に近いはずのものがあります。

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

幸運を。

于 2013-02-13T19:45:12.443 に答える