I have one table with rows and each row has a column that contains a field name (say raw1 - 'Number001', raw2-'ShortChar003', etc). In order for me to get that value of these fields I have to use a second table; this table has 1 raw with many columns (number001, Number002, ShortChar003, etc).
How can I extract the value?
Good Question..You can use lookup function
=Lookup(Fields!CityColumn.Value, Fields!CityColumn.Value, Fields!CountColumn.Value, "Dataset1")
Or you might have to use string functions..ex LEFT, Substring, Right same like SQL.If possible pls post some data of both tables, I will explain in detail
Related
I have brought a table from an Authority database into Excel via power query OBDC type, that includes fields like:
Date - various
Comments - mem_txt
Sequence - seq_num
The Comments field has a length restriction, and if a longer string is entered, it returns multiple rows with the Comments field being chopped into suitable lengths and the order returned in the Sequence field as per extract below. All other parts of the records are the same.
I want to collapse the rows based and concatenate the various Comments into a single entry. There is a date/time column just outside of the screen shot above that can be used to group the rows by (it is the same for the set of rows, but unique across the data set).
For example:
I did try bring the data in by a query connection, using the GROUP_CONCAT(Comments SEPARATOR ', ') and GROUP BY date, but that command isn't available in Microsoft Query.
Assuming the date/time column you refer to is named date_time, the M code would be:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Grouped Rows" = Table.Group(
Source,
{"date_time"},
{{"NewCol", each Text.Combine([mem_text])}}
)
in
#"Grouped Rows"
Amend the Source line as required.
MSAccess 2007 SQL
I am writing a user search dropdown for values in a table column.
If the user types 'xyz' into the field, I want to find all rows where the search column starts-with or contains 'xyz'. But I want those rows where the column starts with 'xyz' to sort first, followed by those rows where that column contains 'xyz'. I know how to use a LIKE clause with wildcards to find the required rows, the question is on how to get the result set returned in the order below.
For example, if my search column contains:
abcxyz
mno
xyzabc
xyzmon
2xyz
abcxyzruf
zxyz
I want the query to return all rows where column contains 'xyz' in this order:
xyzabc
xyzmon
2xyz
abcxyz
abcxyzruf
zxyz
What is the best, most efficient, only - way to make this happen with SQL in MSaccess 2007?
You can use instr():
order by instr(col, "xyz")
Note: This assumes that all strings have "xyz" in them. If not, the non-matches will (unintuitively) come first. However, for your sample data, all the values do have "xyz".
EDIT:
For your revised version:
order by iif(col like "xyz*", 1, 2), col
Gordon's answer got me on the right track.
Order By iif(instr(col, 'xyz')=1, instr(col, 'xyz'), col), col
That does it!!! Thanks so much Gordon.
The second col for Order By forces the starting-with sub-group to also sort alphabetically.
I've 3 fields which contain only text. However, i want to add a calculated field which counts the number of commas in each of these 3 fields and displays it separately in the adjacent column. The snippet of SQL i use is shown below. How can i build the calculated field?
SELECT week, client_I, client_II, client_III
FROM quality_control_test;
Please advise!
well, you can "count" the number of a given character in a string, by using this:
length(c) - length(replace(c,',',''))
I'm assume you can figure out how to leverage that for your own query ;)
May I ask how to count the row of tOracleInput and place it to the tOracleOutput. At the same time, can I add the values of that column SUM(tOracleOutput.OS_BALANCE)?
You could use the tAggregateRow component like this:
You should leave group by paramaters empty and create an output schema that will hold the sum and count. The row generated will then be fed to tOracleOutput.
Suppose I want to order the records order by a field (string data type) called STORY_LENGTH. This field is a multi-valued field and I represent the multiple values using commas. For example, for record1, its value is "1" and record2 its value is "1,3" and for record3 its value is "1,2". Now when, I want to order the records according to STORY_LENGTH then records are ordered like this record1 > record3 > record2. Its clear that STORY_LENGTH data type is string and order by ASC is ordering that value considering it as string. But, here comes the problem. For example, when record4="10" and record5="2" and I try to order it looks like record4 > record5 which obviously I don't want. Because 2 > 10 and I am using a string formatted just because of multiple values of the field.
So, anybody, can you help me out of this? I need some good idea to fix.
thanks
Multi-values fields as you describe mean your data model is broken and should be normalized.
Once this is done, querying becomes much more simple.
From what I've understood you want to sort items by second or first number in comma separated values stored in a VARCHAR field. Implementation would depend on database used, for example in MySQL it would look like:
SELECT * FROM stories
ORDER BY CAST(COALESCE(SUBSTRING_INDEX(story_length, ',', -1), '0') AS INTEGER)
Yet it is not generally not good to use such sorting for performance reasons as sorting would require scanning of whole table instead of using index on field.
Edit: After edits it looks like you want to sort on first value and ignore value(s) after comma. As according to some comment above changes in database design are not an option just use following code for sorting:
SELECT * FROM stories
ORDER BY CAST(COALESCE(NULLIF(SUBSTRING_INDEX(story_length, ',', 1), ''), '0') AS INTEGER)