部分和問題(列持ち)、併発患者のパズル

 「SQLで数学パズルを解く(組み合わせ論編)」に「2-2. 部分和問題(列持ちバージョン)」と「2-3. 併発患者のパズル」を追加しました。

 前者は明智さんから部分和問題に寄せられた巧みな解法をもとに作った問題です。要素を列持ち形式にするのは決して実務的に誉められた設計ではないのですが、しかし残念ながらそういうテーブルに出くわした経験は、皆さんも多々あるはず。そんなガックりんこなテーブル設計に出会ってもめげずに巧い解法を探すのが真のDBエンジニア。皆さんも解答を見る前に自分で考えてみてください。

 後者は、最近私が会社で受けた質問をもとに作ったもの。ちょうど部分和問題の亜種に当たるもので、「おお、なんというシンクロニシティ」(内田樹風)と軽く驚きながら解きました。こうしてみると、気付かないところで、意外に部分和問題は日常の業務にも顔を出しているのかもしれませんね。

 ところで、この両方とも、MySQLやPostgresみたいなOLAP機能のないDBでも解く方法はあるものでしょうか?
 私は、ちょっと簡潔にやるのは無理な気がする。せいぜいUNION ALLで行もちに変換するぐらいか。猛者のチャレンジ求む。