من ازون برنامه نویسام که علاقه ی زیادی به دیتابیس، کوئری ، ویو ، جوین ، گروپ و گزارش و تحلیل دارم. تو یه پروژه ای کار میکردم که متعلق به شرکتی بود، این شرکت دو نوع مشتری داشت: مشتری حقیقی، مشتری حقوقی. تو جدول ثبت فروشها برا هر کدوم یه فیلد با کلید خارجی داشت.
حالا من میخواستم یه ویو بسازم مبلغ کل خریدهای هر مشتری رو جمع بزنه و لیست کنه. خب مشخصه که اول باید جدول خرید رو با جدول مشتری حقیقی و مشتری حقوقی جوین میکردم، بعد براساس کد مشتری گروپ میکردم.
اما نکته ای که بود، من نمیخواستم یه ستون برای نام مشتری حقیقی و یه ستون برای نام مشتری حقوقی داشته باشم، میخواستم کلا یه ستون برای نام مشتری داشته باشم. برای همین از تابع COALESCE استفاده کردم. این تابع به این صورته که اگر یکی از آرگومانهاش null باشه، آرگومان دیگه رو به کار میبره.
SELECT dbo.Purchase.PersonId, dbo.Purchase.LegalPersonId, COALESCE (MAX(dbo.Person.Name), MAX(dbo.LegalPerson.Name)) AS CustomerName, SUM(dbo.Purchase.Amount) AS SumAmount FROM dbo.Purchase LEFT OUTER JOIN dbo.Person ON dbo.Purchase.PersonId = dbo.Person.Id LEFT OUTER JOIN dbo.LegalPerson ON dbo.Purchase.LegalPersonId = dbo.LegalPerson.Id GROUP BY dbo.Purchase.PersonId, dbo.Purchase.LegalPersonId
به همین راحتی میتونم یه ستون نام مشتری داشته باشم که چه مشتری حقوقی چه حقیقی نام اونا تو یه ستون میاد.