私はまだSQLを学んでおり、どのようにcross apply
クエリの関数に行の値を渡すことができますか?SQL Server:提供された行の値に基づいて各行の関数を実行
例を - 私は2つの引数を取る関数を持っている、これは
SELECT
[Project], [emp_id],
[Allocation_start], [Allocation_end]
FROM
First_table
私の最初のテーブルであると仮定すると
select * from [udf_GetIntervals]('2017-01-01','2017-01-30')
データ:
dt_start dt_end
----------------------
2016-12-26 2017-01-01
2017-01-02 2017-01-08
2017-01-09 2017-01-15
2017-01-16 2017-01-22
2017-01-23 2017-01-29
2017-01-30 2017-02-05
私は、上記の関数を7月1日から12月30日までの日付で実行し、それを仮想テーブルに格納し、そのテーブルでクロス適用を使用しました。
作品select *
from [First_table]
cross apply
(select * from #temp) b
が、それは常に最初のテーブルから1つのプロジェクトのレコードごとに、すべての週を返しfirst_tables
開始日と終了日とは独立して動作します。
私はfirst_tablesのstart_dateとend_dateの値を使って、どうやってこれを行うことができるのだろうと思っていたので、十字適用は行の開始/終了日に含まれるweek_intervalsのレコードのみを返します。
私はこの問題について何かヒントをいただきたいと思います。あなたはAPPLY
を使用することができます
「First_table」には何が含まれていますか? – Viki888
最初の表のデータと最終結果の例を説明してください。 –
まず、よく考え抜かれた詳細な質問を書いてください。 SQLを習得している場合、いくつかのアドバイスを受けてください。プログラミングのようなものではなく、すべての機能を記述して関数を呼び出します。あなたは 'セットベースの'解決策を実行することについて考えるべきです。この場合は、すべての可能な値を持つカレンダー表を作成して結合することを意味します。関数を使用すると、100行、1000行、10,000行で正常に動作しますが、最終的に行数が増えると、パフォーマンスが床から落ちてしまい、急いで何かを書き直さなくなります。 –