T-SQL: عرض البيانات من أعمدة متعددة في عمود إخراج واحد باستخدام Case and Coalesce

StackOverflow https://stackoverflow.com/questions/2424820

سؤال

لدي رمز SQL التالي الذي يعمل مقابل قاعدة بيانات طلب التغيير. كل سجل لديه عدة أعمدة تمثل المناطق الأمريكية المصابة. إذا كان التغيير يؤثر على منطقة ستكون القيمة 1 خلاف ذلك.

لذلك أنا أضيف القيم في كل عمود لتحديد ما إذا كان أكثر من منطقة واحدة تتأثر، ستكون الإجابة أكبر من 1.

أحتاج إلى مساعدة في كيفية إجراء تغيير في بياناتي و / أو بيانات الحالة الخاصة بي لإدراج جميع المناطق المتأثرة التي لها قيمة 1، في إخراج "Hand_area".

المناطق المتضررة آخر سبعة أيام


SELECT ID, 
(ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0)  + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)),
Affected_Area = COALESCE(
CASE WHEN [allregions]=1 THEN 'All Regions' ELSE NULL END,
CASE WHEN [midamerica]=1 THEN 'Mid-America' ELSE NULL END,
CASE WHEN [northcentral]=1 THEN 'North Central' ELSE NULL END,
CASE WHEN [northeast]=1 THEN 'Northeast' ELSE NULL END,
CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest' ELSE NULL END,
CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest' ELSE NULL END,
CASE WHEN [southeast]=1 THEN 'Southeast' ELSE NULL END
),
FROM [DB_Reporting].[dbo].change c with (nolock)
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110)))

أي مساعدة موضع تقدير!

عائد هانك

هل كانت مفيدة؟

المحلول

جرب شيئا مثل هذا:

SELECT ID, 
    (ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0)  + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)),
    Affected_Area = 
        CASE WHEN [allregions]=1 THEN 'All Regions, ' ELSE '' END + 
        CASE WHEN [midamerica]=1 THEN 'Mid-America, ' ELSE '' END + 
        CASE WHEN [northcentral]=1 THEN 'North Central, ' ELSE '' END + 
        CASE WHEN [northeast]=1 THEN 'Northeast, ' ELSE '' END + 
        CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest, ' ELSE '' END + 
        CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest, ' ELSE '' END + 
        CASE WHEN [southeast]=1 THEN 'Southeast' ELSE '' END 
FROM [DB_Reporting].[dbo].change c with (nolock)
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110)))    

من المحتمل أن تحتاج إلى تقليم فاصلة زائدة.

نصائح أخرى

هل لديك أي قدر من القدرة على تغيير تصميم هذا الجدول؟ يبدو أقل من الصحيح - كنت أفضل مع عمود المنطقة مع FK قبالة جدول مناطق. ماذا ستفعل مع ما سبق إذا كان عليك إضافة منطقة أخرى ...

إذا لم تفعل ذلك، فقد ترغب في استخدام الأمر Pivot وإنشاء طريقة عرض أكثر طبيعية يمكنك استخدامها للاستعلام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top