Linq로 변환해야하는 끔찍한 SQL 문이 있습니다. 한 번에 모든 것을 수행하는 대신, 작은 조각으로 나누는 것이 더 나을 것이라고 가정하고 있습니다. 단일 쿼리에 대해 이것이 가능하지 않다면, 예를 들자면 내가 끔찍한 무언가를 시작할 수있는 곳을 찾을 수 있을까요? Linq도 이와 비슷한 것을 지원할 수 있습니까? 그렇다면이 짐승을 통해 나를 인도 할 수있는 자습서가 있습니까?Linq Primer에 대한 SQL 문
SELECT
Test1 = CAST(Table2.Column1 AS VARCHAR(10))
, Test2 = CAST(CAST(Table2.Column2 AS INT) AS VARCHAR(10))
, Test3 = CASE WHEN CAST(Table2.Column2 AS INT) = 0 THEN '0' ELSE CAST(CAST(CAST(Table2.Column1 AS FLOAT)/CAST(Table2.Column2 AS FLOAT)*100 AS DECIMAL(5,2))AS VARCHAR(10)) END
, Test4 = '100'
, Test5 = CASE WHEN CAST(Table2.Column2 AS INT) = 0 THEN 'No' WHEN CAST(Table2.Column1 AS FLOAT)/CAST(Table2.Column2 AS FLOAT)*100 > 10 THEN 'Yes' ELSE 'No' END
FROM (
SELECT Test16 = IsNull(SUM(Table1.Column1), 0), Test15 = IsNull(SUM(Table1.Column2), 12) FROM (SELECT DISTINCT
a_Test6 = Table3.Column1
, a_Test7 = 1
, a_Test8 = IsNull(Table4.Column1+', ','')+IsNull(Table4.Column2+' ', '')+IsNull(Table4.Column3, '')
, a_Test9 = IsNull (Table5.Column2, ' ')
, a_Test10 = Table3.Column4
, a_Test11 = Table6.Column4
, a_Test12 = Case IsNull (Table3.Column2, 0) When 1 Then 1 Else 0 End
, a_Test13 = Case IsNull (Table3.Column2, 0) When 1 Then 'Yes' Else 'No' End
, a_Test14 = 'NAP'
FROM Table3
Left JOIN Table3 ON Table3.Column3 = Table3.Column3
INNER JOIN Table5 ON Table6.Column3 = Table5.Column1 Where Table3.Column5 IN (2,3,1) AND Table3.Column6 in (9,8) AND (CAST(CAST(Table3.Column4 AS float) AS int)>=12345 And CAST(CAST(Table3.Column4 AS float) AS int)<=54321)) As Table0
) AS a FOR BROWSE
FROM에 Table6 또는 Table2가 표시되지 않지만 둘 다 SELECT에 표시됩니다. 왜 같은 열에서 자체 테이블에 조인을 남기겠습니까? –
좋은 질문입니다. 불행히도, 나는 좋은 대답이 없다 (상속 된 코드). 내가 그 조인을 해결하는 것에 대해 알게 될 것입니다. 편집 : 변경했습니다. 번역에 실수를 한 것처럼 보입니다. – razorsyntax