بيان حالة في SQL ROW_NUMBER () جملة ORDER BY لا تعمل على القيم VARCHAR و Int

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

سؤال

لماذا لا هذا العمل؟

DECLARE @temp table
(ShipNo int,
 Supplier varchar(10)
)

INSERT INTO @temp VALUES (1,'CFA')
INSERT INTO @temp VALUES (1, 'TFA')
INSERT INTO @temp VALUES (2, 'LRA')
INSERT INTO @temp VALUES (2, 'LRB')
INSERT INTO @temp VALUES (3, 'ABC')
INSERT INTO @temp VALUES (4, 'TFA')

Declare @OrderBy varchar(255)
sET @OrderBy = 'Supplier'



SELECT ROW_NUMBER() OVER (ORDER BY 
CASE @OrderBy
 WHEN 'Supplier' THEN Supplier
 WHEN 'ShipNo' THEN ShipNo
END
) AS RowNo,
ShipNo,
Supplier
FROM @temp

ولكن إذا كنت يلقي ShipNo إلى VARCHAR في بيان الحالة يعمل؟

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

المحلول

وأنا أدرك أن هذا هو آخر العمر ولكن هذا هو عن أي واحد الذي يهوي على هذه القضية وتبحث عن حل:

SELECT ROW_NUMBER() OVER (ORDER BY  
CASE @OrderBy 
 WHEN 'Supplier' THEN Supplier
END
CASE @OrderBy
 WHEN 'ShipNo' THEN ShipNo 
END 
)

وأساسا انك تضع كل حقل في قضيته الخاصة. هل هذا فقط عندما نوع البيانات الخاصة بهم أو قيمة داخل الحقل يختلف عن كل من الأعمدة أو عندما كنت تحصل على خطأ مثل

فشل

وتحويل عند محاولة تحويل الباحث إلى VARCHAR أو varchar إلى كثافة العمليات ..

نصائح أخرى

ومن المباشرة:

CASE
WHEN Boolean_expression THEN result_expression 
    [ ...n ] 
[ 
    ELSE else_result_expression 
] 
END

و"أنواع البيانات من else_result_expression وأي result_expression يجب أن تكون هي نفسها أو يجب أن يكون التحويل الضمني."

ويجب أن يكون ذلك مورد وShipNo نفس نوع البيانات.

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