Mam tabelę z kolumnami N. Nazwijmy je: c1
, c2
, c3
, c4
, ... cN
. Wśród wielu wierszy chcę uzyskać pojedynczy wiersz z COUNT DISTINCT(cX)
dla każdego X w [1, N].Jak wykonać tę samą agregację w każdej kolumnie bez wyświetlania kolumn?
c1 | c2 | ... | cn
0 | 4 | ... | 1
Czy jest sposób, w jaki mogę to zrobić (w procedurze przechowywanej) bez ręcznego wpisywania każdej nazwy kolumny do zapytania?
Dlaczego?
Mieliśmy problem z tym, że błędy w serwerach aplikacji oznaczają, że przepisujemy dobre wartości kolumn z późniejszymi wstawionymi śmieciami. Aby rozwiązać ten problem, przechowuję strukturę logiczną informacji, gdzie każdy wiersz reprezentuje logiczną kwerendę UPDATE
. Następnie, gdy otrzymam sygnał, że rekord jest kompletny, mogę określić, czy jakiekolwiek wartości zostały (błędnie) nadpisane.
Przykład pojedynczego poprawnego rekordu w wielu wierszach: w każdej kolumnie znajduje się co najwyżej jedna wartość.
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 12:00am | NULL | 2:00pm |
Reconciled row:
| 1 | 12:00am | 1:00pm | 2:00pm |
Przykładem nieprzejednanej zapis, że chcę, aby wykryć:
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 9:00am | 1:00pm | 2:00pm | -- New initialize time => irreconcilable!
Czy pytasz, jak pobrać nazwy kolumn lub jak przeprowadzić agregację? –
Wiem, jak pobrać nazwy kolumn, ale nie wiem, co zrobić, aby rozwinąć wyrażenie wokół każdej nazwy kolumny w zapytaniu. Chcę uniknąć 'SELECT COUNT DISTINCT (c1), COUNT DISTINCT (c2), ..., COUNT DISTINCT (cN) FROM ...' w mojej procedurze przechowywanej. –
Możesz to zrobić z dynamicznym SQL, oczywiście. Przy okazji, jak duże jest X? – dezso