У меня есть запрос на выборку, который выглядит следующим образом:Ввести новые поля Выбор запроса на основе значений расщепления от 1-го столбца
SELECT
LEFT([Total INNOVATIONS/MMD],INSTR(1,[Total INNOVATIONS/MMD],'-')-2) AS BRAND, MID([Total INNOVATIONS/MMD],INSTR(1,[Total INNOVATIONS/MMD],'-')+2 , INSTRREV([Total INNOVATIONS/MMD],'-')-2) AS INNOTYPE, RIGHT([Total INNOVATIONS/MMD], INSTRREV([Total INNOVATIONS/MMD],'-')+2) AS RECDATE, [Fact],
[Week Ending 05/01/14], [Week Ending 12/01/14], [Week Ending 19/01/14], [Week Ending 26/01/14], [Week Ending 02/02/14], [Week Ending 09/02/14], [Week Ending 16/02/14], [Week Ending 23/02/14], [Week Ending 02/03/14], [Week Ending 09/03/14], [Week Ending 16/03/14], [Week Ending 23/03/14], [Week Ending 30/03/14], [Week Ending 06/04/14], [Week Ending 13/04/14], [Week Ending 20/04/14], [Week Ending 27/04/14], [Week Ending 04/05/14], [Week Ending 11/05/14], [Week Ending 18/05/14], [Week Ending 25/05/14], [Week Ending 01/06/14], [Week Ending 08/06/14], [Week Ending 15/06/14], [Week Ending 22/06/14], [Week Ending 29/06/14], [Week Ending 06/07/14], [Week Ending 13/07/14], [Week Ending 20/07/14], [Week Ending 27/07/14], [Week Ending 03/08/14], [Week Ending 10/08/14], [Week Ending 17/08/14], [Week Ending 24/08/14], [Week Ending 31/08/14], [Week Ending 07/09/14], [Week Ending 14/09/14], [Week Ending 21/09/14], [Week Ending 28/09/14], [Week Ending 05/10/14], [Week Ending 12/10/14], [Week Ending 19/10/14], [Week Ending 26/10/14], [Week Ending 02/11/14], [Week Ending 09/11/14], [Week Ending 16/11/14], [Week Ending 23/11/14], [Week Ending 30/11/14], [Week Ending 07/12/14], [Week Ending 14/12/14], [Week Ending 21/12/14], [Week Ending 28/12/14] FROM [Sheet1$] WHERE Fact="ACV Dist"
я представил 3 новых полей, а именно
«BRAND» , "INNOTYPE", "RECDATE"
в SQL-запрос, чтобы сформировать набор записей. Значения для этих новых столбцов должны быть выбраны путем разделения 1-го поля на разделителе «-». , например.
strConString = _
"Provider=Microsoft.ACE.OLEDB.12.0; " _
& "Data Source='" & varPathAndFile & "'; " _
& "Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1"";"
strSQL = "SELECT TOP 1 * FROM [Sheet1$]"
Set objCON = CreateObject("ADODB.Connection")
objCON.Open strConString
Set objRS = CreateObject("ADODB.Recordset")
With objRS
.locktype = ADOLockType.adLockOptimistic
.CursorType = ADOCursorType.adOpenStatic
.cursorlocation = ADOCursorLocation.adUseClient
.Source = strSQL
.activeconnection = objCON
.Open
.movelast
.movefirst
Stop
strSQL = "SELECT "
For Each fld In .Fields
If InStr(1, fld.Name, "INNOVATIONS") > 0 Then
strFieldValue = fld.Name
--strSQL = strSQL & "[" & fld.Name & "], "
strSQL = strSQL & " LEFT([" & strFieldValue & "],INSTR(1,[" & strFieldValue & "],'-')-2) AS BRAND,"
strSQL = strSQL & " MID([" & strFieldValue & "],INSTR(1,[" & strFieldValue & "],'-')+2 , INSTRREV([" & strFieldValue & "],'-')-2) AS INNOTYPE,"
strSQL = strSQL & " RIGHT([" & strFieldValue & "], INSTRREV([" & strFieldValue & "],'-')+2) AS RECDATE,"
End If
If fld.Name = "Fact" Then
strSQL = strSQL & " [" & fld.Name & "], "
End If
If InStr(1, fld.Name, "Week Ending") > 0 And Right(fld.Name, 2) = Right(lngYear, 2) Then
strSQL = strSQL & "[" & fld.Name & "], "
End If
Next fld
Stop
If Right(Trim(strSQL), 1) = "," Then strSQL = Left(Trim(strSQL), Len(Trim(strSQL)) - 1)
strSQL = strSQL & " FROM [Sheet1$] WHERE Fact=""ACV Dist"" "
Debug.Print strSQL
.Close
.Source = strSQL
Stop
.Open
Stop
Как я заполнить значения в эти 3 поле столбцов с 1-го поля колонок (раскалывает его значение)?
показывает фактическое заявление SQL вы строите со всем этим ... –
@MarcB я не сделал понимаете, что вы имели в виду. Я показал инструкцию sql и весь код. Мне просто нужно найти способ либо изменить инструкцию SQL, чтобы он мог заполнить 3 новых столбца из 1-го столбца, либо найти способ через VBA для заполнения трех столбцов. Первое - это то, что мне действительно нравится. Кроме того, если есть способ избавиться от 1-го столбца после заполнения 3 столбцов из его значений, тогда ничего подобного!:) – sifar786
так что «somevariabletext» - это то, что буквально появляется в вашем запросе? И ничего себе ... вы действительно должны искать нормализацию базы данных. имея много столбцов для по существу «тех же» данных, смехотворно. –