CAS unique pour datatables de plusieurs colonnes

L'article avec la quantité et le prix sont interrogés à partir du server SQL pour Excel et Crystal Report. La quantité et le prix sont la quantité en vrac (livres). Je dois le convertir en quantité de sac et prix de sac. Les données de livres par sac ne sont pas dans le server SQL et elles sont différentes sur chaque article. Mon article est environ 20 seulement. Je ne peux pas créer de table permanente ou temporaire pour stocker des livres par sac de données dans SQL Server. Je peux utiliser CASE en SQL pour calculer la quantité et le prix du sac. Mais, il faut deux CAS. Comment puis-je utiliser un CAS ou une autre méthode qui peut simplifier le SQL et le garder simple à maintenir? Mon SQL courant.

SELECT Item, Quantity, Price, CASE item WHEN 'Item1' THEN Quantity/32 WHEN 'Item2' THEN Quantity/33 … ELSE Quantity END AS QtyPerBag, CASE item WHEN 'Item1' THEN Price*32 WHEN 'Item2' THEN Quantity*33 … ELSE Price END AS PricePerBag FROM MasterTable 

L'approche de DhruvJoshi est une bonne approche. En utilisant le constructor VALUES() , c'est encore plus simple:

 SELECT mt.Item, mt.Quantity, mt.Price, mt.Quantity/factors.Factor AS QtyPerBag, Price * Factors.factor AS PricePerBag FROM MasterTable mt LEFT JOIN (VALUES ('Item1', 32), ('Item2', 33) ) factors(item, factor) ON factors.item = mt.item; 

Remarque: Si votre quantité est stockée sous la forme d'un integer, vous devez utiliser des points décimaux pour les facteurs (sauf si vous voulez une division entière).

Comme déjà souligné dans les commentaires, vous devriez envisager d'utiliser l'approche table / set.

Une façon si vous voulez faire cela à l'intérieur d'une requête est comme ci-dessous:

 SELECT Item, Quantity, Price, Quantity/Factor AS QtyPerBag, Price * Factor AS PricePerBag FROM MasterTable LEFT JOIN ( SELECT 'Item1' as Item, '32' as Factor UNION SELECT 'Item2' as Item, '33' as Factor -- and so on ... ) T ON T.item=masterTable.item