

サーバサイドの言語はPHP7.0です。  
標題の件を達成する場合、一般的にどういった解決策をとるべきか全く想像がつかず 的を得ない質問をしてしまいました。  
しかし皆様からのコメントを得て、自分が分からなくなっているポイントがなんとなくみえてきました。

### 前提

SELECTから得られる内容は
決して一テーブルからの出力結果に留まらず、参照されるテーブルの全項目でもない、関数で適宜項目が補われている状態、あるテーブルの行分横展開する形態で、列数を予測することができない

### 分からないポイント

列が可変ということはSQLServerから取得される結果の項目数・項目名が不明なはずで、これらを捉えられなくてはPHPでテーブルに展開できないのでは？という解釈をしていました。  
でも、よくよく考えると固定で出力される項目は明らかだし、全ての項目数ってCOUNTやLENGTHで取れるのですよね？実現できそうな気がしてきました。

[![画像の説明をここに入力](https://i.stack.imgur.com/O7fOV.png)](https://i.stack.imgur.com/O7fOV.png)


CC BY-SA 4.0
2018-07-05T03:33:50.027
45324
2022-11-02T13:07:35.907
2022-02-16T00:37:32.980
3060
25696
question
php database
DB（MSSQL）からのSELECT結果・列数が予測でない内容を、HTMLでのテーブル出力を達成したい


「追記」部分をみると、「行持ち」のデータ(社員別販売実績テーブル)を「列持ち」のデータとして表現したいという質問に思いました。

「行持ち->列持ち」変換ということであれば、以下のように  
`GROUP BY` と `CASE` で実現できます。(同一社員、日付に複数の実績がある場合はMAXではなくSUMに変更)

SQL文のうち、列持ちにするためのCASE文の列を、必要な分だけ動的に作成できれば(例えば、PHPでSQL文を文字列結合などで作成する)、解決できるのではないでしょうか。

[code]

    SELECT
      e.name
      , MAX(CASE WHEN s.sales_date = '2018-07-05' THEN s.amount ELSE NULL END) AS '2018-07-05'
      , MAX(CASE WHEN s.sales_date = '2018-07-06' THEN s.amount ELSE NULL END) AS '2018-07-06'
      , MAX(CASE WHEN s.sales_date = '2018-07-07' THEN s.amount ELSE NULL END) AS '2018-07-07'
      , MAX(CASE WHEN s.sales_date = '2018-07-08' THEN s.amount ELSE NULL END) AS '2018-07-08'
      , MAX(CASE WHEN s.sales_date = '2018-07-09' THEN s.amount ELSE NULL END) AS '2018-07-09'
      , MAX(CASE WHEN s.sales_date = '2018-07-10' THEN s.amount ELSE NULL END) AS '2018-07-10'
      , MAX(CASE WHEN s.sales_date = '2018-07-11' THEN s.amount ELSE NULL END) AS '2018-07-11'
    FROM
      sales AS s
    JOIN
      employees AS e
    ON
    s.employee_id = e.id
    GROUP BY
      s.employee_id
    ORDER BY e.id
    
[/code]


CC BY-SA 4.0
2018-07-05T08:10:23.920
45329
2018-07-05T08:10:23.920
45324
answer