• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLServerのPIVOT絡みの処理)

SQLServerのPIVOT絡みの処理でオペランドのデータ型 nvarchar は sum 演算子では無効です

このQ&Aのポイント
  • SQLServerのPIVOT絡みの処理でオペランドのデータ型 nvarchar は sum 演算子では無効です。原因、及び回避策について教えてください。
  • VB6のプログラムからACCESSMDBからデータを取得する処理を、DBを変更してOracleからSQLServerに変更しました。PIVOT相当の処理をSQLで行おうとした際に「オペランドのデータ型 nvarchar は sum 演算子では無効です」という警告が出てしまいます。どのような原因が考えられ、どのように回避すればよいでしょうか?
  • SQLServerのPIVOT絡みの処理で「オペランドのデータ型 nvarchar は sum 演算子では無効です」という警告が表示されます。この警告の原因と回避策について教えてください。

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

  • ベストアンサー
  • refinas
  • ベストアンサー率100% (2/2)
回答No.1

自分が参考にしたサイトを記しておきます。 オチは「ストアドでPIVOTを含むSQLを生成し実行」です。

参考URL:
http://blogs.wankuma.com/kaya/archive/2006/09/24/39459.aspx
milletjel
質問者

お礼

ご回答ありがとうございます。 該当ページ参考にさせていただきます。 本件に関して、直接の原因はエラーメッセージ通りsuuryou項目がnvarcharとなっていたためでした。(Oracle上では数値型だったのですが・・・) どうも 1.SQLServerのリンクテーブル機能によるopenquery 2.Oracleとのリンクテーブル機能 3.openquery中での、UNION この3つのいずれか、或いは複合により、取得データの型が全てnvarcharになっていたようです。 今回は、openqueryにて取得したデータに直接PIVOTを使用するのではなく、SQLServer側で一度suuryou項目を数値に変換したものに対してPIVOTを使用することで、目的の値を取得することができました。 (さんぷる) SELECT     pvt.moji    ,pvt.moji2    ,SUM([01]), SUM([02]) ,(略) From    (SELECT      oraData.moji     ,oraData.dd     ,CAST(oraData.suuryou AS numeric(10,0)) AS suuryou    FROM      openquery  (略) AS oraData    WHERE      oraData.moji = "xxx" OR oraData.moji2 = "yyy"    ) AS oraData2 PIVOT     (         SUM(oraData2.suuryou)         FOR oraData2.dd IN           (              [01], [02],(略)           )      ) AS pvt 結局、PIVOTとタイトルをつけるも、それ以外がネックとなっていたようです。 お手数をおかけいたしました。 ※何かしら回答をいただけないと、経過を追記することも、  閉じることもできないのは不便ですね。