0
;WITH n AS  
( 
  SELECT problemID, StationName, problemCode, ProblemCreateDate, probCount, 
    c = COUNT(*) OVER (PARTITION BY StationName, problemCode), 
    rn = ROW_NUMBER() OVER  
    ( 
      PARTITION BY StationName, problemCode ORDER BY ProblemCreateDate DESC, problemID DESC 
    ) 
  FROM dbo.tblProblems
) 
 SELECT problemID, StationName, problemCode, ProblemCreateDate, c 
 FROM n WHERE rn = 1; 

という名前の別のテーブルがありtblCustomers、列isAssistentType( bit)があります

inner join内部結合を試みましたが、複雑すぎて withのフィルターを適用しようとするとエラーが発生します

tblCustomers where tblCustomers.isAssistent =1

正しい構文の書き方を知って、とても感謝しています。

再編集

inner join tblCustomers on tblProblems.CustID = tblCustomers.custID

エラー、最後の試行の 1 つ

メッセージ 4104、レベル 16、状態 1、行 14 マルチパート識別子 "tblProblems.CustID" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子「tblproblems.problemID」をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.custID" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.StationName" をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子「tblproblems.problemCode」をバインドできませんでした。メッセージ 4104、レベル 16、状態 1、行 12 マルチパート識別子 "tblproblems.ProblemCreateDate" をバインドできませんでした。

これは私が行った野生の推測です:

;WITH n AS  
( 
  SELECT tblCustomers.*,tblproblems.problemID, tblproblems.StationName, tblproblems.problemCode, tblproblems.ProblemCreateDate, tblproblems.probCount, 
    c = COUNT(*) OVER (PARTITION BY tblproblems.StationName, tblproblems.problemCode), 
    rn = ROW_NUMBER() OVER  
    ( 
      PARTITION BY tblproblems.StationName, tblproblems.problemCode ORDER BY tblproblems.ProblemCreateDate DESC, tblproblems.problemID DESC 
    ) 
  FROM dbo.tblProblems
  inner join tblCustomers on tblProblems.CustID = tblCustomers.custID
) 
SELECT tblCustomers.*, tblproblems.problemID, tblproblems.custID, tblproblems.StationName, tblproblems.problemCode, tblproblems.ProblemCreateDate, c 
FROM n 
inner join tblCustomers on tblProblems.CustID = tblCustomers.custID
WHERE rn = 1; 

目的は、tblCustomers.isAssistent=1 の場合にのみ tblProblems の結果を選択することでした。

4

1 に答える 1

1

外部でのクエリが間違っています。

SELECT tblCustomers.*, n.problemID, n.custID, 
           n.StationName, n.problemCode, n.ProblemCreateDate, c 
FROM n 
inner join tblCustomers on n.CustID = tblCustomers.custID
WHERE rn = 1; 

そして、なぜ再び tblcustomers に参加するのですか?

あなたはただ行うことができます:

;WITH n AS  

( 
  SELECT tblCustomers.*,tblproblems.problemID, tblproblems.StationName, 
         tblproblems.problemCode, tblproblems.ProblemCreateDate,
         tblproblems.probCount, 
    c = COUNT(*) OVER 
        (PARTITION BY tblproblems.StationName, tblproblems.problemCode), 
    rn = ROW_NUMBER() OVER  
    ( 
      PARTITION BY tblproblems.StationName, tblproblems.problemCode
      ORDER BY tblproblems.ProblemCreateDate DESC, tblproblems.problemID DESC 
    ) 
  FROM dbo.tblProblems
  inner join tblCustomers on tblProblems.CustID = tblCustomers.custID
  WHERE tblCustomers.isAssistent =1

) 
SELECT n.* FROM n where rn = 1

問題データだけが必要な場合

;WITH n AS  

( 
  SELECT tblproblems.problemID, tblproblems.StationName, 
         tblproblems.problemCode, tblproblems.ProblemCreateDate,
         tblproblems.probCount, 
    c = COUNT(*) OVER 
        (PARTITION BY tblproblems.StationName, tblproblems.problemCode), 
    rn = ROW_NUMBER() OVER  
    ( 
      PARTITION BY tblproblems.StationName, tblproblems.problemCode
      ORDER BY tblproblems.ProblemCreateDate DESC, tblproblems.problemID DESC 
    ) 
  FROM dbo.tblProblems
  inner join tblCustomers on tblProblems.CustID = tblCustomers.custID
  WHERE tblCustomers.isAssistent =1

) 
SELECT n.* FROM n where rn = 1
于 2012-08-26T13:18:05.847 に答える