Как я Преобразовываю Столбцы Sql в строки?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

17
задан StuartLC 16 December 2014 в 18:30
поделиться

6 ответов

Необходимо смотреть на пункт UNPIVOT.

Update1: GateKiller, странно достаточно я прочитал статью (о чем-то несвязанном) об этом этим утром, и я пытаюсь подталкивать свою память, где я видел его снова, имел некоторые достойно выглядящие примеры также. Это возвратится мне, я уверен.

Update2: Найденный им: http://weblogs.sqlteam.com/jeffs/archive/2008/04/23/unpivot.aspx

6
ответ дан 30 November 2019 в 14:44
поделиться

Я должен был сделать это для проекта прежде. Одно из главных затруднений, которые я испытал, объясняло, что я пытался сделать другим людям. Я потратил тонну времени, пытаясь сделать это в SQL, но я нашел функцию центра горестно несоответствующей. Я не помню точной причины, почему это было, но это слишком упрощенно для большинства приложений, и это не полно реализованный в SQL MS 2000. Я волновал запись функции центра в.NET. Я отправлю его здесь в надеждах, это помогает кому-то, когда-нибудь.

 ''' <summary>
    ''' Pivots a data table from rows to columns
    ''' </summary>
    ''' <param name="dtOriginal">The data table to be transformed</param>
    ''' <param name="strKeyColumn">The name of the column that identifies each row</param>
    ''' <param name="strNameColumn">The name of the column with the values to be transformed from rows to columns</param>
    ''' <param name="strValueColumn">The name of the column with the values to pivot into the new columns</param>
    ''' <returns>The transformed data table</returns>
    ''' <remarks></remarks>
    Public Shared Function PivotTable(ByVal dtOriginal As DataTable, ByVal strKeyColumn As String, ByVal strNameColumn As String, ByVal strValueColumn As String) As DataTable
        Dim dtReturn As DataTable
        Dim drReturn As DataRow
        Dim strLastKey As String = String.Empty
        Dim blnFirstRow As Boolean = True

        ' copy the original data table and remove the name and value columns
        dtReturn = dtOriginal.Clone
        dtReturn.Columns.Remove(strNameColumn)
        dtReturn.Columns.Remove(strValueColumn)

        ' create a new row for the new data table
        drReturn = dtReturn.NewRow

        ' Fill the new data table with data from the original table
        For Each drOriginal As DataRow In dtOriginal.Rows

            ' Determine if a new row needs to be started
            If drOriginal(strKeyColumn).ToString <> strLastKey Then

                ' If this is not the first row, the previous row needs to be added to the new data table
                If Not blnFirstRow Then
                    dtReturn.Rows.Add(drReturn)
                End If

                blnFirstRow = False
                drReturn = dtReturn.NewRow

                ' Add all non-pivot column values to the new row
                For Each dcOriginal As DataColumn In dtOriginal.Columns
                    If dcOriginal.ColumnName <> strNameColumn AndAlso dcOriginal.ColumnName <> strValueColumn Then
                        drReturn(dcOriginal.ColumnName.ToLower) = drOriginal(dcOriginal.ColumnName.ToLower)
                    End If
                Next
                strLastKey = drOriginal(strKeyColumn).ToString
            End If

            ' Add new columns if needed and then assign the pivot values to the proper column
            If Not dtReturn.Columns.Contains(drOriginal(strNameColumn).ToString) Then
                dtReturn.Columns.Add(drOriginal(strNameColumn).ToString, drOriginal(strValueColumn).GetType)
            End If
            drReturn(drOriginal(strNameColumn).ToString) = drOriginal(strValueColumn)
        Next

        ' Add the final row to the new data table
        dtReturn.Rows.Add(drReturn)

        ' Return the transformed data table
        Return dtReturn
    End Function
1
ответ дан 30 November 2019 в 14:44
поделиться

ОБЪЕДИНЕНИЕ должно быть Вашим другом:

SELECT Column1 FROM table WHERE idColumn = 1
UNION ALL
SELECT Column2 FROM table WHERE idColumn = 1
UNION ALL
SELECT Column3 FROM table WHERE idColumn = 1

, но это может также быть Вашим противником на больших наборах результатов.

0
ответ дан 30 November 2019 в 14:44
поделиться

Если у Вас есть фиксированный набор столбцов, и Вы знаете, каковы они, можно в основном сделать серию подвыборов

(SELECT Column1 AS ResultA FROM TableA) as R1

и присоединиться к подвыборам. Все это в едином запросе.

0
ответ дан 30 November 2019 в 14:44
поделиться

Я не уверен в синтаксисе SQL Server для этого, но в MySQL я сделал бы

SELECT IDColumn, ( IF( Column1 >= 3, 1, 0 ) + IF( Column2 >= 3, 1, 0 ) + IF( Column3 >= 3, 1, 0 ) + ... [snip ] )
  AS NumberOfColumnsGreaterThanThree
FROM TableA;

РЕДАКТИРОВАНИЕ: очень (очень) краткий поиск Google говорит мне, что CASE оператор делает то, что я делаю с IF оператор в MySQL. Вы можете или не можете вытащить использование из результат Google, который я нашел

ДАЛЬНЕЙШЕЕ РЕДАКТИРОВАНИЕ: Я должен также указать, что это не ответ на Ваш вопрос, а альтернативное решение к Вашей фактической проблеме.

0
ответ дан 30 November 2019 в 14:44
поделиться
SELECT IDColumn, 
       NumberOfColumnsGreaterThanThree = (CASE WHEN Column1 >= 3 THEN 1 ELSE 0 END) + 
                                         (CASE WHEN Column2 >= 3 THEN 1 ELSE 0 END) + 
                                         (Case WHEN Column3 >= 3 THEN 1 ELSE 0 END) 
FROM TableA;
0
ответ дан 30 November 2019 в 14:44
поделиться
Другие вопросы по тегам:

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