Справка SQL-запроса с таблицей моста

Как уже упоминалось, в вашем случае вы запускаете NotifyPropertyChanged (), когда изменяется сам массив, а не какой-либо элемент массива.

Если вы хотите, чтобы элементы могли запускать событие, вам нужно реализовать класс, подобный:

public class NotifyingData<T> : INotifyPropertyChanged 
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private T _Data;
    public T Data
    {
        get { return _Data; }
        set { _Data = value; NotifyPropertyChanged(); }
    }
}

, а затем заполнить ваш массив этим классом:

_OffsetAngles[0] = new NotifyingData<double> { Data = 10 };
[115 ] У меня нет доступа к VS прямо сейчас, поэтому могут быть некоторые ошибки, но это должно быть правильным понятием для вас.

6
задан Powerlord 18 November 2008 в 17:58
поделиться

7 ответов

Вы могли сделать что-то вроде этого:

select userid, username
,      max(case when permissionid=10 then rights end) as permission10_rights
,      max(case when permissionid=11 then rights end) as permission11_rights
,      max(case when permissionid=12 then rights end) as permission12_rights
from   userpermissions
group by userid, username;

Необходимо явно добавить подобное макс. (...) столбец для каждого permissionid.

3
ответ дан 17 December 2019 в 04:53
поделиться

Если бы Вы, где использование MySQL я предложил бы Вас, используете group_concat () как ниже.

select UserId, UserName, 
       group_concat(PermissionId) as PermIdList,
       group_concat(Rights SEPARATOR ',') as RightsList
from Table_user join Table_UserPermissions on 
     Table_User.UserId = Table_UserPermissions.UserId=
GROUP BY Table_User.UserId

Это возвратилось бы

UserId UserName PermIdList  RightsList
1      John     10,11,12    1,2,3

Быстрый поиск Google 'mssql group_concat' показал пару различных хранимых процедур (I), (II) для MSSQL, который может достигнуть того же поведения.

1
ответ дан 17 December 2019 в 04:53
поделиться

Короткий ответ:

Нет.

Вы не можете динамично включить столбцы к своему запросу.

Помните, SQL является основанным на наборе языком. Вы запрашиваете наборы и наборы соединения вместе.

То, что Вы откапываете, является рекурсивным списком и требуя что список быть представленным в виде строки вместе горизонтально скорее затем вертикально.

Вид, можно фальсифицировать его с рядом сам соединения, но чтобы сделать это, необходимо знать все возможные полномочия перед записью запроса..., который является тем, что предложили другие предложения.

Можно также задержать recordset на другой язык и затем выполнить итерации через это для генерации надлежащих столбцов.

Что-то как:

SELECT Table_User.userID, userName, permissionid, rights
FROM Table_User
        LEFT JOIN Table_UserPermissions ON Table_User.userID =Table_UserPermissions.userID
ORDER BY userName

И затем отобразите все полномочия для каждого пользователя, использующего что-то как (Python):

userID = recordset[0][0]
userName = recordset[0][1]
for row in recordset:
   if userID != row[0]:
       printUserPermissions(username, user_permissions)
       user_permissions = []
       username = row[1]
       userID = row[0]

    user_permissions.append((row[2], row[3]))

printUserPermissions(username, user_permissions)
1
ответ дан 17 December 2019 в 04:53
поделиться

Если это приемлемо, стратегия, которую я использовал, и для разработки и для реализации, состоит в том, чтобы вывести запрос, не вертевшийся или в Excel или в Доступ. У обоих есть намного более дружественный UIs для вертящихся данных, и намного больше людей удобно в той среде.

После того как у Вас есть дизайн, который Вы любите, затем легче думать о том, как копировать его в TSQL.

0
ответ дан 17 December 2019 в 04:53
поделиться

Кажется, что функция центра была разработана для ситуаций, где можно использовать агрегатную функцию на одном из полей. Как то, если я хотел знать, сколько дохода каждый продавец сделал для компании x. Я мог подвести итог ценового поля из таблицы sales. Я затем получил бы продавца и сколько дохода в продажах они имеют. Для полномочий, хотя не имеет смысла суммировать/считать/и т.д. permissionId поле или поле Rights.

0
ответ дан 17 December 2019 в 04:53
поделиться

Вы могли создать временный table_flatuserpermissions:

UserID
PermissionID1
Rights1
PermissionID2
Rights2
...etc to as many permission/right combinations as you need

Вставьте записи на эту таблицу от Table_user со всем разрешением и полевым пустым указателем прав.

Записи обновления на этой таблице от table_userpermissions - сначала рекордная вставка и набор PermissionID1 и Rights1, Вторая запись для пользователя обновляет PermissionsID2 и Rights2 и т.д.

Затем Вы запрашиваете эту таблицу для генерации отчета.

Лично, я просто придерживался бы UserId, UserName, PermissionID, столбцов Rights, которые Вы имеете теперь.

Возможно, замена в некотором тексте для PermissionID и Прав вместо числовых значений.

Возможно, отсортируйте таблицу по PermissionID, Пользователю вместо Пользователя, PermissionID, таким образом, аудитор мог проверить пользователей на каждом типе полномочий.

0
ответ дан 17 December 2019 в 04:53
поделиться

Можно хотеть посмотреть на следующий пример при создании перекрестных запросов в SQL:

http://www.databasejournal.com/features/mssql/article.php/3521101/Cross-Tab-reports-in-SQL-Server-2005.htm

Похоже, что существуют новые операции, которые были включены как часть SQL Server 2005 под названием ЦЕНТР и UNPIVOT

0
ответ дан 17 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: