2017-10-03 20 views
-3

ちょうどSQLに潜入し、私が好きなレポート形式を見ていて、これが正しいフォーラムであることを願っていました。私は基本的な選択ステートメントとグループ分けに精通していますが、これを行う方法や単一のデータテーブルで可能な場合は困惑しています。SQL集計とグループ化

私が持っているテーブルのサンプルは、次のとおりです。 表:

Item  Loc Frozen  Scanned Adj 
1457481 85  0   1   1 
1457481 85  0   1   1 
1457481 25  1   1   0 
1457481 25  1   1   0 
1457481 35  1   1   0 
1457481 45  1   1   0 

Here is the format I would like to show: 

Item  GoodLoc  Adj 
1457481  [email protected]  [email protected] 
      [email protected] 
      [email protected]  


これは、追加のテーブルを結合しなくても可能ですか?どんな支援も大歓迎です。この問題の詳細なし

+1

[so]は無料コード作成サービスではありません。 **あなた自身でコードを書くことを試みることが期待されます**。 [もっと研究をして](http://meta.stackoverflow.com/questions/261592)問題がある場合は**あなたが試したことを投稿することができます** **動作していないことの明確な説明**を提供し、** [mcve] **を提供します。私は良い質問と[完璧な質問]を読むことをお勧めします(http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/)。また、[ツアー]も必ず行ってください。 – Igor

+0

これは可能ですが、あなたのフォーマットは結果を表示するには自由度がありません。基本的には、最初に、あなたの凍結/ adjカラムをSUMとitemカラムとlocカラムでグループ化するだけです。これにより、作業する基本的な結果セットが得られます。あなたの特定のフォーマットを取得するには、行番号と自己結合で少し奇妙なものが必要です。 – ZLK

+1

SQLはプレゼンテーション層としてうまく機能しません。 SQLを使用してデータを集計し(合計/集計/結合を行う)、別の言語を使用して表示します。 – Twelfth

答えて

0

は単なる当て推量ですが、ここで可能な解決策である:

と仮定すると、テーブルには:

CREATE TABLE Items 
(
    item INT, 
    Loc  INT, 
    Frozen BIT, 
    Scanner BIT, 
    Adj  BIT 
) 

他の人が言ったように

SELECT DISTINCT 
     Item, 
     CASE 
      WHEN Frozen = 0 
      THEN NULL 
      ELSE CONVERT(VARCHAR(5),COUNT(Loc) OVER (PARTITION BY Loc)) + '@' + CONVERT(VARCHAR(5),Loc) 
     END As GoodLoc, 
     CASE 
      WHEN Adj = 0 
      THEN NULL 
      ELSE CONVERT(VARCHAR(5),COUNT(Adj) OVER (PARTITION BY Adj)) + '@' + CONVERT(VARCHAR(5),Loc) 
     END As Adj 
FROM Items 
ORDER BY GoodLoc DESC 

が、それはそうしてみてくださいManagement Studioではなくプレゼンテーションレイヤー(SSRS)で行うべきデータを提示しようとしているように、

+0

ありがとうございます。それが可能だったのか不思議でした。コードを気に入って、参考にしておく必要がある場合は注意してください。大変感謝しています。 –

関連する問題