Microsoft Access 掲示板

1行だけのクエリデータを縦並びにしたい / 8

14 コメント
views
8
beginner 2025/08/04 (月) 14:32:31 61dd6@2128d

mayuさん ありがとうございます。
やはり全角スペースが入ってた様です。それを注意深く修正したら出来ました。
金額算出の指摘もありがとうございました(確かに間違ってました)。
この素晴らしいSQLは半分も理解できてないのですが(すみません)、コードのままだと項目がA、B・・・になってます(多分ChrWの兼ね合いですね)。それを元データのフィールド名の”期首在庫” ”仕入高” 等にするにはどうすればいいでしょうか? それと各金額を通貨型にするにはどうしたらいいでしょうか?(現在は文字列型になっているので)

通報 ...
  • 9

    コードのままだと項目がA、B・・・になってます(多分ChrWの兼ね合いですね)。
    それを元データのフィールド名の”期首在庫” ”仕入高” 等にするにはどうすればいいでしょうか?

    方法としては大きく2つあります

    【 1 】

    t_num テーブルに従属列を作り、2列構成にします

    CREATE TABLE t_num ( 
          num  INT PRIMARY KEY
        , 科目 VARCHAR(100)
    );
    

     

    num科目
    1期首在庫
    2仕入高
    3当期仕入
    4期末在庫
    5売上原価
    6製品売上高
    7賃収入
    8収入計
    9売上総利益
    10販管費
    11営業利益
    12営業外収益
    13営業外費用
    14経常利益
    15特別損失
    16税引前当期純利益
    17法人税等
    18当期純利益

     
    SQL文では ChrW関数の使用箇所を

    - SELECT ChrW(64 + x.num) As 項目
    
    + SELECT x.科目 As 項目
    

    とテーブルの従属列への参照に置き換えるのが王道と言えるでしょう

    個々のデータをテーブルというオブジェクトを使って「可視化」できるメリットが大きいため
    私としては、こちらの方法をお薦めします

    【 2 】

    t_num テーブルは1列構成のままにしておき、SQL文中に文字リテラルを直に埋め込んでもいいでしょう
    ( お薦めはしませんが )

    - SELECT ChrW(64 + x.num) As 項目
    
    + SELECT Choose(
    +              x.num
    +           , '期首在庫'
    +           , '仕入高'
    +           , '当期仕入'
    +           , '売上原価'
    +           , '製品売上高'
    +           , '賃収入'
    +           , '収入計'
    +           , '売上総利益'
    +           , '賃収入'
    +           , '収入計'
    +           , '売上総利益'
    +           , '販管費'
    +           , '営業利益'
    +           , '営業外収益'
    +           , '営業外費用'
    +           , '経常利益'
    +           , '特別損失'
    +           , '税引前当期純利益'
    +           , '法人税等'
    +           , '当期純利益'
    +        ) As 項目
    

     

    それと各金額を通貨型にするにはどうしたらいいでしょうか?(現在は文字列型になっているので)

     
    【 1 】の方法で実装したSQL

    SELECT x.科目 As 項目
         , Choose( 
               x.num
             , CCur( y.期首在庫 )
             , CCur( y.仕入高 )
             , CCur( y.当期仕入 )
             , CCur( y.期末在庫 )
             , CCur( y.売上原価 )
             , CCur( y.製品売上高 )
             , CCur( y.家賃収入 )
             , CCur( y.収入計 )
             , CCur( y.売上総利益 )
             , CCur( y.販管費 )
             , CCur( y.営業利益 )
             , CCur( y.営業外収益 )
             , CCur( y.営業外費用 )
             , CCur( y.経常利益 )
             , CCur( y.特別損失 )
             , CCur( y.税引前当期純利益 )
             , CCur( y.法人税等 )
             , CCur( y.当期純利益 )
           ) As 金額
         , x.num As 順番
    FROM t_num x
       , Q試算表用Base10_損益各利益 y
    ORDER BY 3
    ;
    

     
    【 2 】の方法で実装したSQL

    SELECT Choose(
                 x.num
              , '期首在庫'
              , '仕入高'
              , '当期仕入'
              , '売上原価'
              , '製品売上高'
              , '賃収入'
              , '収入計'
              , '売上総利益'
              , '賃収入'
              , '収入計'
              , '売上総利益'
              , '販管費'
              , '営業利益'
              , '営業外収益'
              , '営業外費用'
              , '経常利益'
              , '特別損失'
              , '税引前当期純利益'
              , '法人税等'
              , '当期純利益'
           ) As 項目
         , Choose( 
               x.num
             , CCur( y.期首在庫 )
             , CCur( y.仕入高 )
             , CCur( y.当期仕入 )
             , CCur( y.期末在庫 )
             , CCur( y.売上原価 )
             , CCur( y.製品売上高 )
             , CCur( y.家賃収入 )
             , CCur( y.収入計 )
             , CCur( y.売上総利益 )
             , CCur( y.販管費 )
             , CCur( y.営業利益 )
             , CCur( y.営業外収益 )
             , CCur( y.営業外費用 )
             , CCur( y.経常利益 )
             , CCur( y.特別損失 )
             , CCur( y.税引前当期純利益 )
             , CCur( y.法人税等 )
             , CCur( y.当期純利益 )
           ) As 金額
         , x.num As 順番
    FROM t_num x
       , Q試算表用Base10_損益各利益 y
    ORDER BY 3
    ;