• ベストアンサー

並び替え

構造体を必要な時に動的に割り当てた後、伝票月の一致する店舗番号、店舗番号の一致する区分番号1、区分番号の一致する区分番号2を並び替えたいのですが、うまくいきません。SQL文でのORDER BY 文で並び替えると、店舗番号が飛び飛びになってしまいます。クイックソートやバブルソートで、伝票日付を並び替えた中で店舗番号を並び替える、など何か方法はありませんか? '伝票データを格納する構造体 */ Type Aa 伝票日付 as integer 店舗番号 as integer 区分番号1 as integer 区分番号2 as integer End Type dim Denpyo() as Aa

  • aris
  • お礼率86% (33/38)

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

再びmaruru01です。 どうやら逆のようでした。 ORDER BY 伝票日付, 店舗番号, 区分番号1, 区分番号2 これならいいと思いますが。 では。

aris
質問者

お礼

どうもありがとうございます。やってみましたが、やはりORDER BY句からでは無理なようです。伝票番号を優先すると、後の区分番号1と、区分番号2がバラバラになってしまいました。でも、ORDER BY句の中で列指定を並び替えるというのはとても参考になりました。別のプログラムで使わせていただきました。ありがとうございます。

その他の回答 (2)

noname#32133
noname#32133
回答No.3

GROUP BY句を使ったらいいのでは? GROUP BY句とは、ある表の行を、条件ごとにまとめて扱うものです。たとえば人事関係の表なら、部ごとの給与の平均を取るとか。GROUPBY句はSELECTコマンドのオプションとして使います。 はずしてたらごめんなさいm(__)m

aris
質問者

お礼

GROUP BY句は使っています。何度も色々な方法を試しては見たのですが、やはり、一回のSQL文では無理だと思い、月別でデータを取得した後、店舗番号と区分番号1、区分番号2でソートさせることにしました。回答ありがとうございます。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 ORDER BYに複数を指定すればいいんじゃないでしょうか。 この時、前から順に優先してソートするから、 ORDER BY 区分番号2, 区分番号1, 店舗番号, 伝票日付 とすればいいと思いますが。 では。

aris
質問者

補足

早い回答をありがごうとざいました。 すみません。説明が足りなかったと思うので、補足させていただきます。 ORDER BY句を使用し区分番号2,区分番号1,店舗番号,伝票日付とすると、区分2と区分1の順でソートされますが、伝票日付と店舗番号がバラバラになってしまうんです。 伝票日付 店舗番号 区分1 区分2 2002-02-01   2   0   0 2002-02-07   2   0  0 2002-02-04   4  0  0 2002-02-01   8  1  0 2002-02-28 7 2 1 と上のように伝票番号と店舗番号がバラバラになってしまいます。 出したい結果としては、伝票日付が2002-02-01のデータをまとめ、その中で店舗番号が2のデータをまとめ、その中で区分1が0のデータをまとめ、さらに区分2のデータをまとめたいのです。 ORDER BY 句で色々と試しては見たのですが、必ず何処かがバラバラになってしまいます。

関連するQ&A

  • 構造体のソートに関して

    VB初心者です。 Private Save() As InIDtyp Private Type InIDtyp ID As String Name As String Unit As String End Type という宣言をしま構造体で値が入っているときにIDをキーとしてソートすることは可能でしょうか。 1回やってみたのですが、IDのみソートされてしまい、NameとUnitは一緒にソートされずにそのまま残ってしまいました。 デバッグをかけて中を見ましたらこんな感じでした。 例: 元の構造体 Save(0) ------ID:  56 ------Name: AA ------Unit: ms Save(1) ------ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  33 ------Name: LI ------Unit: ba ソート後 Save(0) -----ID:  33 ------Name: AA ------Unit: ms Save(1) -----ID:  35 ------Name: KY ------Unit: yy Save(2) -----ID:  56 ------Name: LI ------Unit: ba どなたか構造体のソートのやり方をご存知の方がいましたらご教授お願いします。

  • 構造体配列の安定なソート

    出席番号と得点の配列を持つ構造体配列で、 出席番号順に並んだ状態でqsortを使って得点をソートする場合、 同じ得点の人でも、出席番号順はばらばらになってしまいますよね。 調べてみて、バブルソートなど安定なソートを使えばいいということが分かったのですが、 qsortは標準ライブラリにあって、 比較関数も見よう見まねで作ってなんとかなったのですが、 他の方法となると具体的にどうすればいいのか、 よくわからない状況です。 http://homepage1.nifty.com/daccho/program/algo/sort3.htm こちらのサイトのソースファイルを見て、 普通のint配列のバブルソートは出来たのですが、 構造体配列を、構造体の中の一つの要素をキーにバブルソートできるようにするには、 ここからどのように変更すればいいのでしょうか? 並び替える内容はint型だけなので、文字列をソートできるようにする必要はなく、 ソート対象も少ないので(上限100程度)、速度的な問題は考慮しなくて大丈夫だと思います。 Cは勉強中で、基本文法がわかるぐらいという状況で、 もしかしたら変なことを言っているのかもしれませんが、 よろしくお願いします。

  • LASTVAL()の使い方

    こんにちは。 現在、バッチで伝票を登録するプログラムを組んでいます。 実施したい内容は、伝票番号を採番し、伝票テーブルと伝票明細テーブルにデータを書き込むと言う物です。 具体的には、以下のテーブルです。 1.TRN_DENPYO  DENPYO_NO  DENPYO_HIDUKE 2.TRN_DENPYO_MEISAI  DENPYO_NO  DENPYO_MAISAI_NO  DENPYO_SYOHINCD ※TRN_DENPYOのDENPYO_NOはserialです。 そこで、TRN_DENPYO にレコードを追加した後、自動的にカウントアップされるTRN_DENPYOのDENPYO_NOを取得するために LASTVAL()を使用したいのですが、うまく行きません。 以下、実際に記述しているSQL文です。 $sql = 'INSERT INTO "TRN_DENPYO"("DENPYO_HIDUKE")VALUES(' . $denpyo_hiduke . ')'; $db->query($sql); $sql = 'SELECT LASTVAL()'; $result =& $db->query($sql); while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { $denpyo_no = $row['LASTVAL()']; } echo $denpyo_no; この時点で、$denpyo_no の値が表示されると思っているのですが、表示されません。 どなたか教えて頂けませんでしょうか? ちなみに環境は、PostgerSQL8.2 php5を使用しています。

  • 条件をつけて日付の古い行を抜き出したい

    SQLserver2005を使っています。 下記のようなテーブルがあります。 ID 処理番号  日付   Data AA  1    2008/1/1  10 AA  1    2008/1/2  11 AA  1    2008/1/3  12 AA  2    2008/1/4  13 AB  3    2008/1/5  14 AB  3    2008/1/6  15 AB  4    2008/1/7  16 この時に「IDと処理番号が一致した場合、日付の一番古い行を抜き出す」 という条件でデータの抽出をすることは可能でしょうか 結果は下記のようになります。 ID 処理番号  日付   Data AA  1    2008/1/1  10 AA  2    2008/1/4  13 AB  3    2008/1/5  14 AB  4    2008/1/7  16 下のような命令文を作ったのですが、 「Data列」が抜き出せません。 select ID,処理番号,min(日付) from テーブルA Group by ID,処理番号 一度上の命令文でテーブルを作って元のテーブルとマッチングさせるしかないのでしょうか?出来れば一発で抜き出したいです。 ご教授宜しくお願いします。

  • 構造体配列の並べ替え

    いつもお世話になっております。 VB6で構造体の配列をソートしたいと考えています。 具体的やりかたは調べたいと思うのですが、ヒントとしてひとつ教えてほしいことがありまして質問させていただきました。 たとえば 名前(string) 身長(integer) 体重(single) 何人分かを仮にprofileという名の構造体に入れて、普通の配列と同じ様に体重だけをソートしたとします。 すると体重だけがソートされてしまうのでしょうか? それとも構造体ごとソートされてくれるのでしょうか? 前者だとかなり悩むことになりそうなので、そこだけ教えていただきたく質問させていただきました。 よろしくお願いします。

  • 構造体配列

    こんにちわ。VB.NET初心者です。伝授お願いします。 VB6では Type Tpn_Index IdxSu As Integer idx(MAXTPN-1) As Integer End Type と定義できますが、VB.netでは構造体の中の配列部分が定義できません。 どのように書けばよろしいでしょうか? Public Structure Tpn_Index Dim IdxSu As Integer Dim idx() As Integer End Structure 上記の Dim idx() As Integer の部分です 宜しくお願いします

  • 命名規則 VB 構造体

    VBの構造体の命名はどうすればいいですか? strXXX as string intYYY as integer ???ZZZ as 構造体 udtZZZ as 構造体 でいいのでしょうか? ユーザー定義型ということでいいのでしょうか?

  • アクセスの集計について

    アクセスのクエリで、伝票番号でグループ化し、その横に、商品番号を並べたいです。 ★元テーブル★(名前:商品テーブル) 伝票番号 商品番号 1163069 AA01232 1168453 AAAA674 1168453 BBBB916 1174348 AA04041 1174348 BB04045 1174348 CC04041 ★作りたい状態★ 伝票番号 新商品番号 1163069 AA01232 1168453 AAAA674、BBBB916 1174348 AA04041、BB04045、CC04041 ★現状★ 伝票番号 新商品番号 1163069 AA01232、AA01232 1168453 AAAA674、BBBB916 1174348 AA04041、CC04041 SQLは、 SELECT 商品テーブル.伝票番号, First([商品番号]) & "、" & Last([商品番号]) AS 新商品番号 FROM 商品テーブル GROUP BY 商品テーブル.伝票番号; です。 first、lastが別に使いたいわけじゃないのですが、 他に方法がわからなくて使いました。 しかし、これだと、2つまでしか表示できないし、1つのものも 2つ表示されてしまって困っています。 わかりにくい質問で申し訳ありませんが、教えてください(^^)

  • インポートの際データが重複して読み込まれてしまう?

    いつも質問ばかりですみません。 別ファイルからデータをインポートする際にどうやっても 変にインポートされてしまいます。 ※リスト形式で表示した下記ファイルがあります  合計6レコード (フィールド)    (フィールド)   (フィールド) 1.「A日付・7/12」「伝票番号・001」 「名前・Z」 2.「A日付・7/12」「伝票番号・002」 「名前・W」 3.「A日付・7/12」「伝票番号・003」 「名前・Y」 4.「A日付・7/13」「伝票番号・004」 「名前・FA」 5.「A日付・7/13」「伝票番号・005」 「名前・W」 6.「A日付・7/13」「伝票番号・006」 「名前・Y」 これを別ファイルにインポートすると (フィールド)    (フィールド)   (フィールド) 1.「A日付・7/12」「伝票番号・001」 「名前・Z」 2.「A日付・7/12」「伝票番号・002」 「名前・W」 3.「A日付・7/12」「伝票番号・003」 「名前・Y」 4.「A日付・7/13」「伝票番号・004」 「名前・FA」 5.「A日付・7/12」「伝票番号・002」 「名前・W」 6.「A日付・7/12」「伝票番号・003」 「名前・Y」 と「名前・W の 伝票番号・002」と「名前・Y の 伝票番号・003」が 重複してインポートされます。(レコードは6個です) さらに再度インポートすると、また重複してインポートされ 且つ、レコードは重複の2を含め、8個になってしまいます。 設定では現在の対象レコード内で一致するレコード更新 一致しないレコードを追加にチェックをしているのですが? つたない説明ですがどなたか回避する方法をご伝授下さい。 使用環境・Mac OS10.3 FM6です

  • UPDATEで困っています

    下記の2つの表があり、 表Aから伝票番号毎に集計したTAXで、 同じ伝票番号をもつ表BのTAXを、一括更新しようと考えています。 表Bについては、伝票番号の中で最小の明細番号の行のみ 更新しなければなりません。 SQL-SERVERでは、下記のSQLでどうやら大丈夫そうなのですが、 Oracleでは、更新どころかエラーが発生してしまい、 途方に暮れています。 どなたか、ご教授頂けないでしょうか? よろしくお願い致します。 update B set 税額 = AA.税額合計 from B inner join (select 伝票番号, min(明細番号) as 最小明細番号   from B group by 伝票番号) as BB on BB.伝票番号 = B.伝票番号 and BB.最小明細番号 = B.明細番号 inner join (select 伝票番号, sum(税額) as 税額合計 from A group by 伝票番号) as AA on AA.伝票番号 = B.伝票番号 (表A) ・伝票番号 ・明細番号 ・TAX (表B) ・伝票番号 ・明細番号 ・金額 ・TAX