It’s easiest using dataview to produce the alternate table with the various food as rows, having like and hate as columns, instead of doing like and hate as rows, collating the files having those values. So here is the easiest solution:
## A's dietary preferences
```dataview
TABLE WITHOUT ID link(file.link, foodname) as Food, A_likes as Likes, A_hates as Hates
FLATTEN choice(contains(like, "A"), "❤️", "") as A_likes
FLATTEN choice(contains(hate, "A"), "⛔", "") as A_hates
WHERE file.folder = this.file.folder
WHERE foodname AND (contains(like, "A") OR contains(hate, "A"))
```
Which produces this output:
With preferences as rows
I’m not sure how to do this variant with a pure DQL query, if it’s at all possible, so for me it’s easier to switch to dataviewjs, but it’s not as nice looking as the previous query. (Could possibly be a little nicer, but I need to think on that for a little while… )
So here is the code:
```dataviewjs
const person = '"A"'
const result = await dv.query(`
TABLE WITHOUT ID link(file.link, foodname) as Food, likes, hates
FLATTEN choice(contains(like, ${ person }), "Yes", "No") as likes
FLATTEN choice(contains(hate, ${ person }), "Yes", "No") as hates
WHERE file.folder = this.file.folder
WHERE foodname AND
( contains(like, ${ person }) OR
contains(hate, ${ person }) )
`)
if ( result.successful ) {
const values = result.value.values
let likes = []
let hates = []
values.forEach(i => {
if ( i[1] == "Yes" )
likes.push( i[0] )
if ( i[2] == "Yes" )
hates.push( i[0] )
})
dv.table(["preference", "food"],
[
[ "like", likes.join(", ") ],
[ "hate", hates.join(", ") ]
])
} else
dv.paragraph("~~~~\n" + result.error + "\n~~~~")
```
Which produces this output: