-2

データベース テーブルを誤って削除してしまい、古いバックアップから復元する必要がありました。バックアップしてから復元するまでの間に、特定のクエリから受け取った結果を変更するようなことをしました。5 つの結果が必要ですが、結果の行にはさまざまなColor値があるため、7 つの結果が得られます。どういうわけか、完全に機能する前に。ここに私のSQLがあります:

select LocationID, SUM(TransAmount) as TotalSales, DBAName, Color 
from dbx.dbo.SampleData 
group by LocationID, DBAName, Color

それは私に与えていました:

LocationID      TotalSales  DBAName                Color
267529000000    7660.51     FASTWAY #1 TACO BELL   Red
267529000001    2681.801    FASTWAY #2 TACO BELL   Orange
267529000002    3020.57     FASTWAY #3 TACO BELL   Yellow
267529000003    3062.63     FASTWAY #4 TACO BELL   Green
267529000004    3401.36     FASTWAY #5 TACO BELL   Blue

しかし、一見同じデータで、次のようになります。

LocationID      TotalSales  DBAName                 Color
267529000000    2183.26     FASTWAY #1 TACO BELL    Indigo
267529000000    2901.48     FASTWAY #1 TACO BELL    Red
267529000000    2575.77     FASTWAY #1 TACO BELL    Violet
267529000001    2681.80     FASTWAY #2 TACO BELL    Orange
267529000002    3020.57     FASTWAY #3 TACO BELL    Yellow
267529000003    3062.63     FASTWAY #4 TACO BELL    Blue
267529000004    3401.36     FASTWAY #5 TACO BELL    Green

色として常にインディゴとバイオレットがありましたが、それらを無視してレッドをメインに使用しました。何か案は?この苛立たしい出来事を回避するためのトリックはありますか? ありがとう!

4

1 に答える 1

0

あなたが望むものはすべて明確ではありませんが、単純なステートメントで内部クエリを使用して色を変更し、集計とグループ化を行う外部クエリにラップすることができるので、それを持っIndigoViolet数えて表示するだけの場合。望ましい結果が得られます。RedCASE

SELECT LocationID, SUM(TransAmount) AS TotalSales, DBAName, Color 
FROM (
  SELECT LocationID, TransAmount, DBAName, 
    CASE Color 
     WHEN 'Indigo' THEN 'Red' 
     WHEN 'Violet' THEN 'Red' 
     ELSE Color END 
    AS Color 
  FROM dbx.dbo.SampleData 
) x
GROUP BY LocationID, DBAName, Color

ただし、これは適切な解決策ではない可能性があります。

編集:最初に見つかった値を取得する別の方法。ただし、パフォーマンスには適していない可能性があります。

SELECT 
    s.LocationID, 
    SUM(TransAmount) AS TotalSales, 
    DBANAME_Color.DBAName, 
    DBANAME_Color.Color 
FROM dbx.dbo.SampleData s 
INNER JOIN (
    SELECT 
        LocationID, 
        ROW_NUMBER() OVER (PARTITION BY LocationID ORDER BY DBAName) AS Row, 
        DBAName, 
        Color
    FROM dbx.dbo.SampleData 
) DBANAME_Color ON s.LocationID = DBANAME_Color.LocationID
WHERE DBANAME_Color.Row = 1 
GROUP BY s.LocationID, DBANAME_Color.DBAName, DBANAME_Color.Color
于 2013-08-14T23:29:00.017 に答える