‫۱۱ سال و ۹ ماه قبل، شنبه ۳۰ دی ۱۳۹۱، ساعت ۱۵:۴۱
سلام،
ممنون از مطالب مفیدتون.
آیا دو دستور زیر با هم یکسان هستند یا خیر؟
range unbounded preceding
range between unbounded preceding and current row

و کوئری اولتون باید مساله running total باشه، که به سادگی توسط Over Clause حل شده.
کوئری زیر روشی بوده که قبل از نسخه 2012 برای حل اینگونه مسائل مورد استفاده قرار میگرفته
SELECT AccountId,  
       TranDate,
       TranAmt,
       D.sumAmt AS older_method
       Sum(TranAmt) OVER(partition by Accountid 
                         ORDER BY TranDate 
                         RANGE UNBOUNDED PRECEDING) AS SumAmt        
FROM  #Transactions AS T1
CROSS APPLY (SELECT SUM(T2.TranAmt)
   FROM #Transactions AS T2
  WHERE T2.AccountId = T1.AccountId
    AND T2.TranDate <= T1.TranDate) AS D(SumAmt)
ORDER BY T1.AccountId, T1.TranDate;

‫۱۱ سال و ۹ ماه قبل، جمعه ۲۹ دی ۱۳۹۱، ساعت ۲۲:۲۰
Split کردن به عنوان روش کلی خیلی خوب، اما وقتی مساله رو میشه بدون درگیر شدن با بحث Splitting بسادگی حل نمود چرا باید سراغ روش پر هزینه‌تر رفت؟!
فقط توجه داشته باشید که ما قصد داریم تنها تکرار یک کلمه را بررسی کنیم نه تمام کلمات. بله اگه قرار بر این باشد که تمام کلمات را تفکیک شده داشته باشیم و تعداد آنها را بدست آوریم ناچارا باید سراغ splitting رفت.
‫۱۱ سال و ۹ ماه قبل، جمعه ۲۹ دی ۱۳۹۱، ساعت ۱۹:۳۲
سلام،
شما از اینکه مقادیر null هنگامی که مرتب سازی غیرنزولی است در ابتدا آمدند این برداشت را داشتین که مقادیر red را ابتدا به null تبدیل کنید... .
اما من پیشنهاد دیگری دارم، با کمک اعداد به رنگ‌ها اولیت میدهیم سپس در اولیت‌های یکسان مرتب سازی بر اساس رنگ صورت می‌گیرد.
یعنی:
Select ID,t.Name,Color 
  from TestSort
 Where t.color is not null
 order by  case when color = 'red' then 0 else 1 end,
           color;