 |
|
ขออนุญาตสอบถามเรื่อง Query Sql ในการเอา Alias มาใช้งานหน่อยครับ |
|
 |
|
|
 |
 |
|
(**ดูจากรูปผมต้องการ alias ที่ชื่อ SearchMonth มา Where อะครับ)ผมลองมาหลายวิธีแล้วอะครับ ยังทำไม่ได้สักที รบกวนชี้แนะหน่อยครับ

Code (SQL)
Select a.RequestID,b.FullName,a.RequestDate,(select DATEname(M,RequestDate) ) as SearchMonth
,c.ErrorName,concat(substring( a.RequestRemark,0,50),'...' ) as SubRemark,SubStatus = Case a.RequestStatus
when 'Open' then 'รอดำเนินการ'
When 'Closed' then 'เสร็จเรียบร้อย'
End
From RtbRequest a
Left outer join tbLogin b
On a.RequestEmpID = b.id
Left outer join RtbError c
On a.RequestErrorID = C.ErrorID
Where rrequestDate = 'January' order by a.requestID DESC
Tag : .NET, Ms SQL Server 2014, Web (ASP.NET), Win (Windows App), VB.NET
|
|
 |
 |
 |
 |
Date :
2017-05-26 22:22:21 |
By :
adminliver |
View :
1304 |
Reply :
8 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่รู้เหมือนกันว่าทำได้ไหม
เท่าที่รู้คือมันใช้แบบตรง ๆ ไม่ได้ครับ
ปกติทำอยู่ 2 แบบครับ
1. ยกคำสั่งมาทั้งชุดเลย
Code (SQL)
Select a.RequestID,b.FullName,a.RequestDate,(select DATEname(M,RequestDate) ) as SearchMonth
,c.ErrorName,concat(substring( a.RequestRemark,0,50),'...' ) as SubRemark,SubStatus = Case a.RequestStatus
when 'Open' then 'รอดำเนินการ'
When 'Closed' then 'เสร็จเรียบร้อย'
End
From RtbRequest a
Left outer join tbLogin b
On a.RequestEmpID = b.id
Left outer join RtbError c
On a.RequestErrorID = C.ErrorID
Where
(select DATEname(M,RequestDate) )= 'January'
order by a.requestID DESC
2. เอาวงเล็บครอบ
Code (SQL)
select * from (
Select a.RequestID,b.FullName,a.RequestDate,(select DATEname(M,RequestDate) ) as SearchMonth
,c.ErrorName,concat(substring( a.RequestRemark,0,50),'...' ) as SubRemark,SubStatus = Case a.RequestStatus
when 'Open' then 'รอดำเนินการ'
When 'Closed' then 'เสร็จเรียบร้อย'
End
From RtbRequest a
Left outer join tbLogin b
On a.RequestEmpID = b.id
Left outer join RtbError c
On a.RequestErrorID = C.ErrorID
) t1
Where SearchMonth= 'January' order by requestID DESC
ผิดถูกขออภัยน่ะครับ
ไม่ค่อยแม่นเหมือนกัน
|
 |
 |
 |
 |
Date :
2017-05-27 20:15:48 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
SELECT Fuck.*, tmp69.*, ISNULL(FuckAgain.Status, 'นมบูดนมเน่า') AS ASS
FROM RtbRequest Fuck
OUTER APPLY
(
SELECT TOP 1 DATENAME(M, GETDATE()), DATENAME(M, DATEADD(M, 1, GETDATE()))
FROM RtbRequest tmp96
WHERE Fuck.RequestEmpID = tmp96.RequestEmpID
) tmp69
(FuckAliasMomColumn1, FuckAliasMomColumn2
)
LEFT JOIN RtbRequest FuckAgain ON Fuck.RequestEmpID = FuckAgain.RequestEmpID
WHERE FuckAliasMomColumn1 = 'May'
|
 |
 |
 |
 |
Date :
2017-05-27 20:51:31 |
By :
รถคันนี้สำดำ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เล่าเรื่องจริงและตลกให้ฟัง
มีของอยู่ 2 สิ่งและเป็นสิ่งเดียวกัน ยกตัวอย่างเช่น
Fuck.RequestEmpID = FuckAgain.RequestEmpID
ไม่เท่ากับ
FuckAgain.RequestEmpID = Fuck.RequestEmpID
มีคนเคยเถึยงผมว่า "มันไม่เท่ากัน"
...
...
...
สุดท้ายผมยกฉีกกระดาษมาแผ่นหนึ่ง
--- ใช้ดินสอดำ 2 B เขียนลงไป (หนึ่งฝั่งซ้ายและหนึ่งฝั่งขวา)
------ 1 = 1
--- ย้ายหนึ่งฝั่งซ้ายเอาไปไว้ฝั่งขวา
--- ย้ายหนึ่งฝั่งขวาเอาไปไว้ฝั่งซ้าย
ผมถามลอยฯไปว่า "มันเท่ากันไหม?" + 55555
|
 |
 |
 |
 |
Date :
2017-05-27 21:08:48 |
By :
รถคันนี้สีดำ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ให้ปวดสมองเล่นฯ CROSS APPLY & OUTER APPLY & CROSS APPLY +55555
Code (SQL)
USE tempdb
GO
DECLARE @LoanAmount NUMERIC(10, 2) = 10000 --ยอดเงินกู้
DECLARE @AnnualRate NUMERIC(10, 8) = 6.8 --อัตราดอกเบี้ย/ปี
DECLARE @NumberOfMonths INT = 48 -- four year
DECLARE @StartDate DATETIME = '2013-12-01';
--Principle, Capital = เงินต้น
--Interest = ดอกเบี้ย
--Compound interest = ดอกเบี้ยทบต้น
WITH InputVariables
AS (
SELECT P, M, R, C = ROUND((P * R) / (1 - POWER(1 + R, - M)), 2)
FROM (
SELECT P = @LoanAmount, M = @NumberOfMonths, R = @AnnualRate / 12 / 100
) InputData
),
MonthlyPayments (
PmtNo,
PmtDate,
Balance,
Principle,
Interest,
CumulPrinciple,
CumulInterest
)
AS (
SELECT X,
@StartDate,
--DATEADD(MONTH, DATEDIFF(MONTH, '19000101', @StartDate), '19000101'),
CAST(NewBalance AS NUMERIC(10, 2)),
CAST(P - NewBalance AS NUMERIC(10, 2)),
CAST(C - (P - NewBalance) AS NUMERIC(10, 2)),
CAST(P - NewBalance AS NUMERIC(10, 2)),
CAST(C - (P - NewBalance) AS NUMERIC(10, 2))
FROM InputVariables
CROSS APPLY (
SELECT X = 1
) CalcPmtNo
CROSS APPLY (
SELECT NewBalance = ROUND(P * POWER(1 + R, X) - (POWER(1 + R, X) - 1) * C / R, 2)
) CalcNewBalance
UNION ALL
SELECT X,
DATEADD(MONTH, 1, mp.PmtDate),
CAST(NewBalance AS NUMERIC(10, 2)),
CAST(mp.Balance - NewBalance AS NUMERIC(10, 2)),
CAST(C - (mp.Balance - NewBalance) AS NUMERIC(10, 2)),
CAST(mp.CumulPrinciple + mp.Balance - NewBalance AS NUMERIC(10, 2)),
CAST(mp.CumulInterest + C - (mp.Balance - NewBalance) AS NUMERIC(10, 2))
FROM MonthlyPayments mp
CROSS JOIN InputVariables
CROSS APPLY (
SELECT X = mp.PmtNo + 1
) CalcPmtNo
CROSS APPLY (
SELECT NewBalance = CASE
WHEN X = M
THEN 0.00 /* Last Payment */
ELSE
ROUND(P * POWER(1 + R, X) - (POWER(1 + R, X) - 1) * C / R, 2)
END
) CalcNewBalance
WHERE X <= M
)
SELECT PmtNo,
PmtMonth = DATENAME(MONTH, PmtDate) + STR(YEAR(PmtDate), 5),
PmtAmount = Principle + Interest,
Principle,
Interest,
CumulPrinciple,
CumulInterest,
Balance
FROM MonthlyPayments
ORDER BY PmtNo
OPTION (MAXRECURSION 32767);
|
 |
 |
 |
 |
Date :
2017-05-27 21:23:57 |
By :
รถคันนี้สีดำ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
โลกใบนี้ไม่ได้มีเพียงหนึ่ง
--- จะเป็นขี้ข้า พ่อค้า คหบดี มันก็ไม่แตกต่างกัน (ตายเหมือนกัน)
ผมได้ SQL Query ที่สามารถเข้าใจได้แต่อธิบายยาก (ยังไม่เพียงพอสำหรับผม)
--- FIFO Cost Of Good Sold.
Code (SQL)
DECLARE @table TABLE
(
entrydate DATETIME, openingbal DECIMAL(15, 4), credit DECIMAL(15, 4), debit DECIMAL(15, 4), closingbal DECIMAL(15, 4)
);
INSERT INTO @table
SELECT '2014-09-01 12:05:43.203', 0.000, 0.000, 1.000, 0.000
UNION
SELECT '2014-09-01 13:05:43.203', 0.000, 1.000, 0.000, 0.000
UNION
SELECT '2014-09-10 08:05:43.203', 0.000, 1.000, 0.000, 1.000
UNION
SELECT '2014-10-02 23:05:43.203', 94000.000, 0.000, 900.000, 93100.000
UNION
SELECT '2014-10-03 23:05:43.203', 0.000, 1000.000, 0.000, 0.000
UNION
SELECT '2014-10-03 23:06:43.203', 0.000, 0.000, 500.000, 0.000
UNION
SELECT '2014-10-14 23:52:27.327', 4000.000, 0.000, 1500.000, 2500.000;
--DECLARE @TotalPrevBalance decimal(15,3)
--SET @TotalPrevBalance = (SELECT SUM(credit - debit) FROM @table WHERE entrydate < '2014-10-01 23:05:43.203')
--UPDATE @table SET openingbal = openingbal + @TotalPrevBalance WHERE entrydate = '2014-10-02 23:05:43.203'
UPDATE @table SET openingbal = openingbal +
(SELECT SUM(ISNULL(credit, 0.000) - ISNULL(debit, 0.000)) FROM @table
WHERE entrydate < '2014-10-01 23:05:43.203')
WHERE entrydate = '2014-10-02 23:05:43.203'
;WITH cte
AS
(SELECT *, ROW_NUMBER() OVER
(ORDER BY entrydate Asc
) rid
FROM @table WHERE entrydate >= '2014-10-01 23:05:43.203'
),
cte1
AS
(
SELECT entrydate, openingbal , credit, debit, CAST(openingbal + credit - debit AS DECIMAL(15, 4)
) AS closingbal, rid
FROM cte WHERE rid = 1
UNION ALL
SELECT curr.entrydate, CAST(curr.openingbal + prev.closingbal AS DECIMAL(15, 4)
), curr.credit, curr.debit, CAST(curr.openingbal + prev.closingbal + curr.credit - curr.debit AS DECIMAL(15, 4)
) AS closingbal, curr.rid
FROM cte curr INNER JOIN cte1 prev ON curr.rid = prev.rid + 1
)
SELECT *
FROM cte1
ORDER BY entrydate;
--2014-10-02 23:05:43.203 94001.000 0.000 900.000 93101.000 1
--2014-10-03 23:05:43.203 93101.000 1000.000 0.000 94101.000 2
--2014-10-03 23:06:43.203 94101.000 0.000 500.000 93601.000 3
--2014-10-14 23:52:27.327 97601.000 0.000 1500.000 96101.000 4
-- 97601 = 93601.000 + 4000
|
 |
 |
 |
 |
Date :
2017-05-31 20:48:36 |
By :
หน้าฮี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|