سؤال

لقد حدد البيان مع الأعمدة المحسوبة وأود أن استخدام قيمة واحدة عمود محسوب في آخر.هل هذا ممكن ؟ هنا هو المفتعلة سبيل المثال لإظهار ما أحاول القيام به.

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
هل كانت مفيدة؟

المحلول

لا.

جميع نتائج صف واحد من نخبة هي ذرية. وهذا هو، يمكنك عرض كل منهم كما لو أنها تحدث بشكل متواز ولا يمكن أن تعتمد على بعضها البعض.

إذا كنت في اشارة الى الأعمدة المحسوبة، فإنك تحتاج إلى تحديث إدخال صيغة لنتيجة لتغيير خلال مختارة.

والتفكير في الأعمدة المحسوبة وحدات الماكرو أو وجهات النظر المصغرة التي تضخ قليلا حساب كلما كنت تسميها.

وعلى سبيل المثال، وهذه الأعمدة تكون متطابقة، ودائما:

-- assume that 'Calc' is a computed column equal to Salaray*.25
SELECT Calc, Salary*.25 Calc2 FROM YourTable

وكما نضع في اعتبارنا أن الخيار persisted لا يغير أي شيء من هذا. إنها تحافظ على قيمة حول التي هي لطيفة للفهرسة، ولكن لا يغير atomicity.

نصائح أخرى

للأسف لا حقا، ولكن الحل الذي هو في بعض الأحيان يستحق كل هذا العناء هو

SELECT [calcval1], [calcval1] * .25 AS [calcval2]
FROM (SELECT [calcval1] = CASE Statement FROM whatever WHERE whatever)

ونعم من الممكن.

استخدم في rel="nofollow"> للحصول على يختار المتداخلة:

طريقتان يمكنني التفكير في القيام بذلك.نفهم أولا أن calval1 عمود غير موجود بقدر ما SQL Server المعنية إلى بيان له تشغيل, وبالتالي فإنه لا يمكن استخدامها مباشرة كما showning المثال الخاص بك.حتى تتمكن من وضع حساب هناك مرتين ، مرة واحدة على calval1 ومرة واحدة كما إحلال calcval1 في calval2 الحساب.الطريقة الأخرى هي أن تجعل جدول مشتقة مع calval1 في ذلك ومن ثم حساب calval2 خارج جدول مشتقة شيئا مثل:

select calcval1*.25 as calval2, calval1, field1, field2
from (select casestament as cavlval1, field1, field2 from my table) a

سوف تحتاج إلى اختبار الأداء.

ويجب عليك استخدام الخارجي تطبيق بدلا من subselect:

select V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V

وأنت لا يمكن أن "إعادة تعيين" قيمة عمود محسوب في جملة SELECT، إذا كان هذا هو ما نحاول القيام به ... ويستند قيمة عمود محسوب على الصيغ عمود محسوب. التي يمكن أن تشمل قيمة عمود محسوب آخر .... ولكن كنت canlt إعادة الصيغ في بند اختر ... إذا كان كل ما تريد القيام به هو "إخراج" قيمة استنادا الى اثنين من الأعمدة المحسوبة، (كما في بناء الجملة في الخاص تقرأ السؤال "ثم     "[calcval2]"
في

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25 

وستصبح مجرد اسم مستعار عمود في إخراج اختر البند.

وأو تسأل كيفية تحديد الصيغ واحد يحسب العمود إلى أن تستند إلى آخر؟

scroll top